2010-04-04 127 views
1

我想創建一個腳本(),使我更容易輸入文件夾。從腳本更改shell目錄?

例如。如果我輸入「to apache」,我希望它將當前目錄更改爲/ etc/apache2。但是,當我在腳本中使用「cd」命令時,它似乎改變了腳本內的路徑,所以shell中的路徑沒有改變。

我怎麼能做這個工作?

+0

http:// stackoverflow。com/questions/874452/change-current-directory-from-a-script – 2013-03-01 19:59:20

回答

5

使用別名或函數,或者源腳本而不是執行它。

BASH常見問題entry #60

4

使用功能

to_apache(){ 
    cd /etc/apache 
} 

放於一個文件,例如:mylibrary.sh,只要你想使用它的源文件。例如

#!/bin/bash 
source /path/mylibrary.sh 
to_apache 
2

正如Ignacio所說,把它變成一個函數(或者也許是一個別名)。

我傾向於這樣做的方式是創建函數的shell腳本 - 腳本和函數具有相同的名稱。然後,在某個時間點,我將輸入腳本('。funcname'),然後我可以簡單地使用該函數。

我傾向於更喜歡功能到別名;它更容易管理參數等。

此外,對於更改目錄的具體情況,我使用CDPATH。使用CDPATH的竅門是有在開始的空項:

export CDPATH=:/work4/jleffler:/u/jleffler:/work4/jleffler/src:\ 
/work4/jleffler/src/perl:/work4/jleffler/src/sqltools:/work4/jleffler/lib:\ 
/work4/jleffler/doc:/u/jleffler/mail:/work4/jleffler/work:/work4/jleffler/ids 

在這個機器上,我的主要主目錄是/ work4/jleffler。我可以通過'cd whatever'一次去大部分相關的子目錄。

如果您沒有先輸入空白條目(或明確的'。'),那麼您不能'cd'進入當前目錄的子目錄,這至少令人不安。

+0

對於沒有CDPATH中的前導「:」的子目錄中的cd,我沒有任何問題。 (Bash 3.2或4.0) – 2010-04-05 00:57:57

+0

@Dennis:好吧,它可能是我在Unix vs bash上從Korn Shell獲得的一段民間傳說;當我第一次開始使用它與ksh時,它肯定是一個問題 - 但我沒有驗證它是否是bash中的問題(因爲我在bash中工作正常)。 – 2010-04-05 01:43:59

0

Ignacio Vazquez-Abrams給出了一個可能回答問題的鏈接,雖然我沒有真正遵循它。簡短的答案是在命令前使用「源」或單個點,例如: 。到apache

但是,如果你有一個更復雜的腳本,我發現有這個問題。看起來原來的腳本文件名變量($ 0)丟失了。我會看到「-bash」,因此您的腳本無法回顯包含完整文件名的錯誤文本。另外,你不能使用「exit」命令,否則你的shell將會退出(尤其是對ssh的不安)。

此外,如果您使用該功能,則「基本名稱」功能會提供錯誤。

所以,在我看來,函數可能是解決其中一些問題的唯一方法,就像傳遞參數一樣。