我刚刚创建了 bash 脚本并想附加变量脚本,但它无法正常工作,这里是脚本:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
Run Code Online (Sandbox Code Playgroud)
我尝试使用 echo 运行附加此脚本,但结果不一样:
echo "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'" > wew.txt
Run Code Online (Sandbox Code Playgroud)
如果我们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 []'
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
你在这里观察到的是,当包裹在“弱引号”中时,“强引号”会失去它们的力量:
$ echo $foo
bar
$ echo '$foo'
$foo
$ echo "echo '$foo'"
echo 'bar'
Run Code Online (Sandbox Code Playgroud)
虽然您可以通过反斜杠转义每个特殊字符来修复您的代码,但避免 shell 扩展的更好方法可能是使用 here-document 而不是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]"'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2123 次 |
| 最近记录: |