preenchimento de valores variáveis não funciona no bash

0

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?

    
por user977828 30.01.2018 / 01:39

1 resposta

2

Existem dois problemas:

  1. Como a Steeldriver apontou , atribuições em shells (exceto derivados de Cshell) parecem
    variable=value
    não
    $variable=value
  2. 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