目前正在嘗試將我的所有別名從 .bash_profile 移動到 .zshrc。但是,在傳遞命令以訪問 AWS 實體時,發現我用于將 root 替換為 ubuntu 的較長別名之一存在問題。
AWS (){
cd /Users/user/aws_keys
cmd=$(echo $@ | sed "s/root/ubuntu/g")
$cmd[@]
}
我得到的錯誤是 AWS:5: command not found ssh -i keypair.pem [email protected]
我真的很感激任何建議!
uj5u.com熱心網友回復:
基本問題是該cmd=$(echo ...行將所有引數混搭成一個以空格分隔的字串,并且您依賴于分詞將其拆分為命令及其引數。但是分詞通常比其他任何事情都更成問題,因此 zsh 默認情況下不會這樣做。這意味著它不是嘗試運行以ssh引數命名的命令-i,keypair.pem而是將整個字串視為命令名稱。
簡單的解決方案是避免將引數混合在一起,因此您不需要分詞來再次將它們分開。您可以使用引數擴展的修飾符將“root”替換為“ubuntu”。順便說一句,我也強烈建議在使用時檢查錯誤cd,如果出現錯誤則不要繼續。
所以是這樣的:
AWS (){
cd /Users/user/aws_keys || return $?
"${@//root/ubuntu}"
}
這種語法可以在 bash 和 zsh 中使用(雙引號可以防止 bash 中出現意外的分詞,并且在 zsh 中并不真正需要)。
順便說一句,我也有點擔心在論點中盲目地用“ubuntu”替換“root”;如果它出現在用戶名以外的地方,比如作為檔案名或主機名的一部分怎么辦?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/421587.html
標籤:
上一篇:執行通過組態檔命名的方法
