Scp

此時如何在我的 TCL 腳本中返回特定的錯誤程式碼?

  • August 28, 2014

我有一個 TCL 期望腳本,它執行 scp 命令將配置文件上傳到我的 DNS 伺服器:

#!/usr/bin/expect -f

set config "~/dnsmasq.conf"

spawn /usr/bin/scp "$config" root@192.168.1.1:/etc/dnsmasq.conf

expect {
   -re ".*yes.*no.*" {
       exp_send "yes\r"
       exp_continue
   }
   -re ".*password.*" {
       exp_send "$password\r"
       expect {
           -re ".*denied.*" {
               exit 7
           }
       }
   }
}

如果找不到 scp 實用程序,我想返回一個特定的錯誤程式碼。目前腳本以 1 的狀態退出。如果腳本以 7 的狀態退出,我可以處理它,因為我知道這是一個拒絕訪問錯誤。Apache 日誌中顯示的錯誤是:

couldn't execute "/usr/bin/scp": no such file or directory
   while executing
"spawn /usr/bin/scp "$config" root@192.168.1.1:/etc/dnsmasq.conf"

此時如何返回錯誤程式碼 5 或其他內容?

最好的方法是檢查它是否存在並且是否可執行:

if { ! ([file exists /usr/bin/scp] && [file executable /usr/bin/scp])} {
   puts stderr "/usr/bin/scp does not exist or is not executable"
   exit 7
}

spawn /usr/bin/scp ...

引用自:https://unix.stackexchange.com/questions/137317