2012-10-29 39 views
1

我想執行foo.bsh只輸入foo.bsh,甚至是foo而不是./foo.bsh。我想暫時對目錄中的所有.bsh以及全局進行此操作。例如,我想要一個全局密鑰MYIP,它調用一個腳本來回顯我的外部IP。我不知道這是否合理,因爲如果我覆蓋回聲,我可能會崩潰。bash - 執行快捷鍵

編輯:更清楚。我想要一個寫「./」的快捷方式爲這些命令保存2個鍵,例如在foo.exe可以用foo執行的DOS下。如果輸入foo(ENTER),無法在當前目錄中查找.bsh文件?

+0

難道要一個目錄添加到[您的路徑(HTTP:/ /kb.iu.edu/data/acar.html)? – CoffeeRain

+0

是否所有.bsh腳本都在同一個目錄中?或者當你在全局狀態時,你是指系統上的所有.bsh腳本? – Lipongo

回答

3

當找不到命令時,您可以掛鉤到bash的處理中,然後添加您自己的函數來處理您喜歡的操作。所以

function command_not_found_handle() 
{ 
    [ -f "${1}.bsh" ] && bash "${1}.bsh" 
} 

,如果你有在當前目錄foo.bsh,你可以只輸入「富」,它會運行:例如,添加到您的.bashrc。

編輯:澄清 - 當bash用盡內部機制來查找您鍵入的命令時,它將運行命令名稱作爲參數的command_not_found_handle()函數。所以,你可以用你想要的任何邏輯來定義這個函數。

+0

在Ubuntu 12中,command_not_found_handle函數出現在/ etc/bash的末尾。bashrc(告訴用戶如何在沒有找到的情況下安裝某些命令)。人們可以用它作爲例子。有些人可能希望重命名它,以便在用戶自己的command_not_found_handle函數失敗時調用它。 –

0

您可以通過編輯您的〜/ .bash_profile中頁面並添加您的可執行文件到列表的末尾的目錄,如

export PATH=$PATH:/your/directory 

我通常會創建一個〜/ bin目錄實現這一點,並存儲所有我的這個目錄中的可執行文件。所以我通常這個條目添加到我的〜/ .bash_profile文件中

export PATH=$PATH:/home/yourname/bin/ 

我所有的我的bin目錄中的腳本(已使用chmod + X之前),只需在控制檯對罵他們的作品之後。

我希望它有幫助。乾杯

2

你真的不應該這樣做,而是將其輸入到你的.bashrc或會話中以將當前目錄添加到PATH中。

PATH=$PATH:. 

當然,這意味着如果有人在一個目錄把具有類似名稱的命令,它可以很容易地被執行。

因此,一個攻擊者:

cd /shared_directory 
echo "rm -rf all_your_files" > apropo 
chmod +x apropo 

然後你:

cd /shared_directory 
apro<TAB> (completes to apropo) 
(all your files are gone). 

如果你想在這裏的目標是命令中肯。

一般來說,更好的解決辦法就是在你的PATH像〜/ bin中的可執行文件鏈接到的東西

所以:

PATH=$PATH:~/bin (in your bashrc or whatever) 
ln -s ~/some_executable ~/bin 
some_executable 
+0

沒錯,感謝您的警告:D – RParadox

+0

+1在'$ PATH'中有'.'的危險。我一直在一些徹頭徹尾的敵對多用戶系統。 –