Я только что создал скрипт 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 []'
Спасибо за вашу помощь
То, что вы наблюдаете здесь, состоит в том, что «сильные кавычки» теряют свою силу, когда они завернуты в «слабые кавычки»:
$ 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]"'
Я успешно создал созданную переменную:
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
Спасибо
То, что вы наблюдаете здесь, состоит в том, что «сильные кавычки» теряют свою силу, когда они завернуты в «слабые кавычки»:
$ 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]"'
Я успешно создал созданную переменную:
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
Спасибо