Сценарий Bash добавляет переменную в файл

Я только что создал скрипт bash и хочу добавить скрипт переменной, но он не работает должным образом, и вот сценарий:

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

Я попытался запустить добавление этого скрипта с помощью эха, но результаты не совпадают:

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

, если мы cat wew.txt получили результат:

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 []'

Спасибо за вашу помощь

3
задан 19 April 2018 в 12:27

4 ответа

То, что вы наблюдаете здесь, состоит в том, что «сильные кавычки» теряют свою силу, когда они завернуты в «слабые кавычки»:

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

Хотя вы можете исправить свой код путем обратного слэш-экранирования каждого специального символа, лучшим способом избежать расширения оболочкой может быть использование здесь-документа вместо echo и цитата (любым из поддерживаемых способов - слабый, сильный или обратный слэш) конечный маркер:

$ 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]"'
5
ответ дан 17 July 2018 в 16:33

Я успешно создал созданную переменную:

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

Спасибо

0
ответ дан 17 July 2018 в 16:33

То, что вы наблюдаете здесь, состоит в том, что «сильные кавычки» теряют свою силу, когда они завернуты в «слабые кавычки»:

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

Хотя вы можете исправить свой код путем обратного слэш-экранирования каждого специального символа, лучшим способом избежать расширения оболочкой может быть использование здесь-документа вместо echo и цитата (любым из поддерживаемых способов - слабый, сильный или обратный слэш) конечный маркер:

$ 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]"'
5
ответ дан 23 July 2018 в 17:25

Я успешно создал созданную переменную:

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

Спасибо

0
ответ дан 23 July 2018 в 17:25

Другие вопросы по тегам:

Похожие вопросы: