次のbashスクリプトがあります。
#!/bin/bash
$db=DB
$H=6973
$cov=38
for i in $(find . -type f -name "*.*.las");
do
cat <<EOF
#qsub <<EOF
#!/bin/bash -l
#PBS -N DASqv
#PBS -l walltime=48:00:00
#PBS -j oe
#PBS -l mem=30G
#PBS -l ncpus=1
#PBS -M [email protected]
##PBS -m bea
cd \$PBS_O_WORKDIR
source activate thegenemyers
DAStrim=$(DASqv -v -H$H -c$cov $db $i | grep Recommend - | sed "s|Recommend ||g" - | sed "s|'||g" -)
DAStrim $db $i
EOF
done
残念ながら、次のエラーが発生しました。
sh Dascrubber_pbs.sh
DASqv: -H '' argument is not an integer
#qsub <<EOF
#!/bin/bash -l
#PBS -N DASqv
#PBS -l walltime=48:00:00
#PBS -j oe
#PBS -l mem=30G
#PBS -l ncpus=1
#PBS -M [email protected]
##PBS -m bea
cd $PBS_O_WORKDIR
source activate thegenemyers
DAStrim=
DAStrim ./DB.309.las
DAStrim=$(DASqv -v -H6973 -c38 DB ./DB.82.las | grep Recommend - | sed "s|Recommend ||g" - | sed "s|'||g" -)
私は例えば見たいと思いました。
私が逃したものは何ですか?
答え1
2つの質問があります。
- 〜のようにスチールドライバーが指摘する。、シェルからの割り当て(Cシェル派生クラスを除く)は次のとおりです。
変える=値
いいえ$変える=値
- ここの文書の区切り文字列を引用しない場合、ここの文書の内容は解釈(拡張)されます。したがって、見ることを期待すべきではなく
DAStrim=$(DASqv -v -H6973 ...)
、見ることを期待しなければなりません。何らかの理由でコマンドを表示するには、またはその文字を引用するか(、、、または他のさまざまなバリエーションを使用できるように)エスケープする必要があります。例えば、DAStrim=whatever_the_output_of_DASqv_is
EOF
'EOF'
"EOF"
\EOF
$
$作業ディレクトリ=/tmp $i=foobar.las $cat<< EOF cd \$WORKDIR ls -l "$i" 今日=$(日付) EOF CD $WORKDIR (算出) ls -l "foobar.las" 今日 = 2018年1月30日火曜日午前1時27分42秒 $cat<< 'EOF' cd \$WORKDIR (上記入力と同じ) ls -l "$i" 今日=$(日付) EOF cd \$WORKDIR (算出) ls -l "$i" 今日=$(日付) $