2

bash スクリプトに問題があり、壁に追いやられています。いくつかのファイルを取り込むはずのコードがあります。

if [[ $FILENODE == null ]]
then
    cp "/home/dash/reference/hg18_bowtie_build/hg18.fa*" "$JOBDIR"
    cp "$IN" "$JOBDIR"
else
    echo "Copying files from node$FILENODE"
    rcp "node$FILENODE-ib:$JOBDIR/hg18.fa*" "node$FILENODE-ib:$JOBDIR/$IN" "$JOBDIR"
fi

通常、条件の最初の部分に該当するため、cp コマンドは最初の引数でワイルドカードを展開することになっています。引数を確実に展開するには、引数を二重引用符で囲む必要があることを理解しています。ただし、このスクリプトを bash -x で実行すると、次のように表示されます。

+ cp '/home/dash/reference/hg18_bowtie_build/hg18.fa*' /usr/tmp/707361.master.cl.osumc.edu
cp: cannot stat `/home/dash/reference/hg18_bowtie_build/hg18.fa*': No such file or directory
+ cp '*.sort.bam' /usr/tmp/707361.master.cl.osumc.edu
cp: cannot stat `*.sort.bam': No such file or directory

何らかの理由で、bash は私の二重引用符を無視するだけでなく、それらを一重引用符に変えているようです。変数は展開されていますが、ワイルドカードは展開されていません。ここで何が起こっているのかを説明できる人がいれば、本当に感謝しています。

4

2 に答える 2

4

グロビングが必要な場合は、ファイル パスを引用しないでください。

cp /home/dash/reference/hg18_bowtie_build/hg18.fa* "$JOBDIR"
于 2012-07-23T05:03:55.283 に答える
3

二重引用符はパラメーターの展開を許可しますが、glob の展開は禁止します。glob ワイルドカードを引用符の外に移動します。

cp "/home/dash/reference/hg18_bowtie_build/hg18.fa"* "$JOBDIR"

2 つ目は、配列を作成します。

files=(foo*)
cp "${files[@]}" "$bar"
于 2012-07-23T05:04:19.757 に答える