在 bash 腳本中,我想在不擴展作為引數傳遞的變數的情況下回顯腳本呼叫。
可以使用擴展變數實作回顯腳本呼叫
echo "${BASH_SOURCE[0]} ${*}"
回顯(腳本的,或任何其他命令的)歷史使用
echo "$(tail -n 1 ~/.bash_history)"
根據需要顯示沒有變數擴展的腳本呼叫,但不適用于正在運行的腳本(僅適用于已完成的腳本)。
如何從正在運行的腳本中回顯腳本呼叫而不對其引數進行變數擴展?
uj5u.com熱心網友回復:
如果您可以使用 執行您的腳本bash -c script args,那么您想要的是可以使用BASH_EXECUTION_STRING變數:
$ bash -c 'echo "$BASH_EXECUTION_STRING"'
echo "$BASH_EXECUTION_STRING"
此輸出不容易理解,但您可以看到該echo命令在執行時會列印未展開的命令。這是因為BASH_EXECUTION_STRING變數的值是文字:echo "$BASH_EXECUTION_STRING"。
因此,如果您的腳本是,例如:
#!/usr/bin/env bash
script="$0"
cmd="$1"
shift
echo "script name: $script"
echo "command line: $cmd"
echo "parameter: $1"
您可以將其執行為:
$ a=42 bash -c './foo.sh "$BASH_EXECUTION_STRING" "$a"'
script name: ./foo.sh
command line: ./foo.sh "$BASH_EXECUTION_STRING" "$a"
parameter: 42
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327052.html
