Ssh

使用 awk 命令的別名時出錯

  • February 10, 2022

我正在嘗試將此別名添加到我的 .zshrc 但遇到錯誤。我已經嘗試轉義 ==、" 和 && 值,但仍然沒有運氣。我錯過了什麼?

alias broke="ssh -t server@5.555.555.555 tail -f documents/dir/`date -u +%Y%m%d`.log | awk '$2=="ABC:" && int($5)>=26 || int($5)<=-26'"
  1. 您過早執行命令替換,因為您的別名是使用雙引號而不是單引號定義的,因此在定義date別名時執行,而不是在呼叫時執行;
  2. 您的外殼將您的awk欄位引用解釋為外殼位置參數和
  3. 定義別名時正在擴展它們;
  4. awk從來沒有看到雙引號,ABC:因此它被解釋為未設置的awk變數ABC(即空字元串),後跟一個未加引號的冒號,位於意外的位置,這可能會引發awk錯誤;
  5. 作為獎勵建議,您應該真正使用$(...)而不是...因為裡面的引用規則更加直覺。

要設置包含命令替換和特殊字元的別名,您應該使用單引號設置它。幾乎從來沒有這樣的案例,您希望在設置別名時而不是在呼叫別名時進行參數擴展。

您不能在單引號中嵌入單引號,但這並不重要,因為引號本身不是分隔符:

alias hassinglequotesembedded='echo "It'\''s not really too hard; current date when the alias is executed is $(date)"; echo '"'but the alias was set at $(date)'"

在 Stack Overflow 上有一些關於引用類型的強烈推薦進一步閱讀:

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