Linux
嘗試執行時如何處理 bash 錯誤?
想像一個具有標準 bash linux 腳本(在 SUSE linux 上執行)的腳本。像這樣:
#!/bin/bash #version=1.0 #Some other text command #-------Comment Changeversion=2.0 ... ...
有什麼方法可以自動處理錯誤或至少說一條自定義消息?例如,我將嘗試執行腳本,但它說:
-bash: ./filename.sh: Keine Berechtigung
所以我必須為文件添加權限 - 有什麼方法可以在嘗試執行它時自動為該文件添加權限,或者至少添加“自定義消息”,如“do chmod +x filename.sh”?
或者,如果我有不同的編碼:
/bin/bash^M: bad interpreter:
腳本本身是否可以執行此命令:
sed -i -e 's/\r$//' filename.sh
或者至少在錯誤資訊中說出來?
我複制了你的問題:
# cat /tmp/tmp #!/bin/bash echo SCRIPT BASH EXECUTED # file /tmp/tmp /tmp/tmp: Bourne-Again shell script, ASCII text executable, with CRLF line terminators # /tmp/tmp -bash: /tmp/tmp: /bin/bash^M: bad interpreter: No such file or directory
以下命令解決了執行該命令的 bash 會話的問題:
# trap 'file $BASH_COMMAND |grep -qs "Bourne-Again shell script, ASCII text executable, with CRLF line terminators" && sed -i -e "s/\r$//" $(echo $BASH_COMMAND|cut -d" " -f1) && echo "DOS FORMAT BASH SCRIPT, SED EXECUTED" && $BASH_COMMAND' ERR # /tmp/tmp testArgument1 testArgument2 -bash: /tmp/tmp: /bin/bash^M: bad interpreter: No such file or directory DOS FORMAT BASH SCRIPT, SED EXECUTED SCRIPT BASH EXECUTED # /tmp/tmp testArgument1 testArgument2 SCRIPT BASH EXECUTED
命令陷阱僅對您目前的會話有效,將其放在 /etc/profile /etc/profile.d 或一些類似的配置文件中,以使其對所有 bash 會話保持持久性。
我僅在 RHEL 7 系統上使用 bash-4.2.46-19.el7.x86_64 對其進行了測試