.shスクリプトを実行すると、予期しない表示"("付近で構文エラーが発生しました。

.shスクリプトを実行すると、予期しない表示

エラーは次のとおりです。

merge_star.sh: line 19: syntax error near unexpected token `('
merge_star.sh: line 19: `cat <(cat ~/asn_project/alignment_sorted/tmp/header.txt | sed 's/ /\t/g') ~/asn_project/alignment_sorted/tmp/tmp.out > ~/asn_project/alignment_sorted/STAR_counts.txt'

問題の.shスクリプトの行は次のとおりです。

cat <(cat ~/asn_project/alignment_sorted/tmp/header.txt | sed 's/ /\t/g') ~/asn_project/alignment_sorted/tmp/tmp.out > ~/asn_project/alignment_sorted/STAR_counts.txt
#!/bin/bash
# create header file
echo gene_name $(cd ~/asn_project/alignment_sorted && ls *_ReadsPerGene.out.tab | sed s/_ReadsPerGene.out.tab// | sort -u) > ~/asn_project/alignment_sorted/tmp/header.txt

# Place each sample's STAR gene count file - ReadsPerGene.out.tab in the tmp/ directory 
# The 2nd column (-f2) of ReadsPerGene.out.tab contains the non-stranded counts
for sample in $(cd ~/asn_project/alignment_sorted && ls *_ReadsPerGene.out.tab | sed s/_ReadsPerGene.out.tab// | sort -u)
do 
    echo ${sample}
    cat ~/asn_project/alignment_sorted/${sample}_ReadsPerGene.out.tab | tail -n +5 | cut -f2 > ~/asn_project/alignment_sorted/tmp/${sample}.count
done

# get a list of gene ids (-f1)
tail -n +5 ~/asn_project/alignment_sorted/N_1_ReadsPerGene.out.tab | cut -f1 > ~/asn_project/alignment_sorted/tmp/geneids.txt

# combine all the columns of the count files
paste ~/asn_project/alignment_sorted/tmp/geneids.txt ~/asn_project/alignment_sorted/tmp/*.count > ~/asn_project/alignment_sorted/tmp/tmp.out

# add the header
cat <(cat ~/asn_project/alignment_sorted/tmp/header.txt | sed 's/ /\t/g') ~/asn_project/alignment_sorted/tmp/tmp.out > ~/asn_project/alignment_sorted/STAR_counts.txt

# remove the tmp folder
rm -rf ~/asn_project/alignment_sorted/tmp

私は.shスクリプトコーディングに初めて触れましたが、どのエラーを修正する必要があるのか​​わかりません。助けてくれてありがとう。

ベストアンサー1

コメントからあなたは言うを使用してこのスクリプトを実行していますsh merge_star.sh。これはshスクリプトの実行に使用していることを意味しますが、最初の行(#!/bin/bash)はbash一部のシステムでは同じですが、他のシステムでは異なります。sh以下bashsh含むいくつかの非POSIX機能。 5.0以下)プロセスの交換(<(...))。したがって、正しいシェルと正しい呼び出しを使用することが非常に重要です。

使用bash merge_star.shするもっと良いこと、スクリプトを実行可能にしchmod a+x merge_star.shてから()直接実行(./merge_star.sh

おすすめ記事