Script Bash anexa variável ao arquivo

3

Acabei de criar o script bash e quero anexar o script da variável, mas ele não estava funcionando corretamente e aqui está o script:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Eu tentei executar este script usando echo, mas os resultados não são os mesmos:

echo "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'" > wew.txt

se cat wew.txt o resultado for:

export PROMPT_COMMAND='RETRN_VAL=0;logger -p local6.debug widianto [69]: echo "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'" > wew.txt []'

Obrigado pela sua ajuda

    
por Widi Anto 19.04.2018 / 11:16

2 respostas

5

O que você está observando aqui é que as "citações strongs" perdem sua força quando envolvidas em "citações fracas":

$ echo $foo
bar
$ echo '$foo'
$foo
$ echo "echo '$foo'"
echo 'bar'

Embora você possa consertar seu código por meio de escape com barra invertida a cada caractere especial, uma maneira melhor de evitar a expansão pelo shell pode ser usar um aqui-documento em vez de echo e quote (em qualquer das formas suportadas - fraco, strong ou barra invertida) o marcador final:

$ cat << \EOF
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
EOF

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
    
por steeldriver 19.04.2018 / 13:22
0

Eu tenho feito sucesso com a variável criada:

widianto@rancher3:~$ cat b.bash
#!/bin/bash
# widianto

a="export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug"
b='"$(whoami) [$$]: $(history 1 | sed'
c='"s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'


echo "$a $b $c'" >> /home/widianto/test.txt

Obrigado

    
por Widi Anto 02.05.2018 / 14:45