2016-12-18 44 views
0

功能我想創建別名這會做這樣的事情要創建它接受與參數

ssh -i {location of file} [email protected] 

sf() { 
    ssh -i ~/.ssh/key [email protected]$1 
} 

alias ssf=sf 

的bash的別名,我必須

ssf host 

如果我這樣做,我的自動完成(zsh,iterm)將不起作用。正在考慮在接受參數的別名中調用函數。任何幫助?

+0

我向我們建議一個功能。 – Cyrus

+0

自動完成功能無法正常工作。我想它看到第一個字爲ssh,然後列出所有主機。 –

+0

@ shaileshgupta:那麼你的要求是什麼? – Inian

回答

0

一種快速,簡便的方法來創建一個接受參數將類似於此僞代碼的東西別名:

#!/bin/bash 

declare -r -a n=('$1' '$2' '$3' '$4' '$5') 

function main() { 

    command -i ${n[0]} -f ${n[1]} --another-arg ${n[2]} 
} 

main 

如果我想這個腳本提供給所有用戶,我通常sudo su將登錄爲根,那麼我將使文件可執行並將腳本文件保存到/usr/bin/目錄。這將允許您使用腳本的名稱作爲終端命令。在root用戶的情況下,如果只希望root用戶有權訪問,請將適當的權限應用於腳本chown root script.sh。如果您想要自定義命令名稱來調用該腳本,請將該腳本命名爲您希望使用的別名。

解釋僞碼

declare -r -a是創建一個只讀數組的語法。 n=是數組變量,它將爲您使用該工具的每個參數保存值。 ('$1''$2''$3''$4''$5')是參數變量,最多爲5參數。 $1將是第一個參數,$2將是下一個,並且是最後一個。在使用腳本別名時,這些參數變量中的每一個都會保存您在命令行中輸入的值。

接下來,我們有main()函數,它將包含您希望運行的命令。在這個main()函數裏面,你可以看到括號裏面帶有括號的n變量,例如${n[0]}。這是什麼,正在呼叫您的n陣列的價值。 bash中的數組值將以0開頭的數字調用,而不是以1開頭。所以0是第一個值,或者是$11是第二個值,或者是$2等等。

的.bashrc方法

用於以同樣的方式創建別名另一種方法是編輯.bashrc文件您登錄下的用戶。因此,根據用戶,您可以:

輸入cd命令並按回車鍵以更改到您的主目錄,其中.bashrc位於當前用戶的位置。

cd 

然後使用nano,打開.bashrc。

nano .bashrc 

滾動到文件底部,添加以下內容:

alias your_alias="bash path/to/your/bash/script.sh' 

一旦別名設置,在ctrl+x類型保存文件。納米將提示您確認。只需輸入y即可確認保存。接下來,您可以重新加載.bashrc,以便您可以立即使用該命令,也可以重新啓動,以便在下次啓動時可用。要重新加載.bashrc您將執行以下操作:

source ~/.bashrc 

而那就是它!您的別名已準備就緒。現在只需使用別名作爲正常的CLI工具命令,在你需要的時候添加你的參數,然後按回車鍵,你的腳本就可以正常工作。

免責聲明

這些方法可能是最有效的還是最安全的使用自己的別名。不過,他們應該足以讓你開始。如果有人希望添加或編輯此答案以使其更具信息性和準確性(如果不準確),請隨時進行。希望這可以幫助。

相關問題