Linux

通過 ssh 執行腳本時,echo 的顏色程式碼不起作用

  • August 7, 2018

全部。

我有以下範常式式碼:

#!/bin/bash
echo "[\033[01;32m  green  \033[01;37m]"
echo "[\033[01;31m  red  \033[01;37m]"

當我在本地執行這個腳本時,我得到了正確的輸出顏色。

但是如果我通過 scp 複製到另一台主機並使用“ssh avadmin@10.224.1.6”sudo sh color-test.sh“”執行它,腳本將列印程式碼而不是顏色。

遠端執行腳本時我應該有什麼注意事項嗎?

的行為

echo '\033'

取決於實施和/或環境。

對於 UNIX 兼容的實現,它輸出一個 ESC 字元後跟 NL,在其他一些實現中,它輸出\033後跟 NL。有些支持擴展-e這些\033轉義序列的選項。

您的腳本有一個#! /bin/bashshe-bang,但您將腳本執行為sh the-script,所以sh解釋它,而不是bash.

在大多數係統上,bash’secho內置預設情況下不會擴展\x序列。只有在xpg_echo啟用該選項或使用該-e選項時才會這樣做(除非xpg_echoposix選項都已啟用)。

在這方面,您的本地sh實現可能是與 UNIX 兼容的(如dash,或使用預設啟用bash的選項編xpg_echo​​譯),但遠端伺服器上的實現不是(如bash)。

如果您想要可移植且可靠的行為,改用printf

printf '[\33[01;32m  green  \33[01;37m]\n'
printf '[\33[01;31m  red  \33[01;37m]\n'

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