Eu tenho o seguinte script:
#!/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
Infelizmente, recebi este erro:
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
Eu esperava ver, por exemplo DAStrim=$(DASqv -v -H6973 -c38 DB ./DB.82.las | grep Recommend - | sed "s|Recommend ||g" - | sed "s|'||g" -)
.
O que eu senti falta?
Existem dois problemas:
- Como a Steeldriver apontou ,
atribuições em shells (exceto derivados de Cshell) parecem
variable=value
não
$variable=value
- Se a string do delimitador do documento aqui não estiver entre aspas,
o conteúdo do documento here é interpretado (expandido).
Portanto, você não deve esperar ver
DAStrim=$(DASqv -v -H6973 ...)
, deve esperar ver DAStrim=whatever_the_output_of_DASqv_is
.
Se, por algum motivo, você quisesse ver o comando,
você deve citar o EOF
ou qualquer um dos seus caracteres
(então você pode usar 'EOF'
, "EOF"
, \EOF
ou outras variações),
ou escape do $
.
Por exemplo, $ WORKDIR=/tmp
$ i=foobar.las
$ cat << EOF
cd \$WORKDIR
ls -l "$i"
today=$(date)
EOF
cd $WORKDIR (output)
ls -l "foobar.las"
today=Tue, Jan 30, 2018 1:27:42 AM
$ cat << 'EOF'
cd \$WORKDIR (same input as above)
ls -l "$i"
today=$(date)
EOF
cd \$WORKDIR (output)
ls -l "$i"
today=$(date)
$
por
30.01.2018 / 02:27