2015-07-12 99 views
0

我是shell腳本新手。我已將script_hdl腳本文件保存在我的主目錄中。在我的主目錄中,我想按照以下順序使用腳本進行導航:cd ../../site/edu/ess/project/user/rark444使用shell腳本瀏覽文件夾

然後從此新位置打開一個新選項卡終點站。

我用這個作爲我的腳本:

#!/bin/bash 
alias script_hdl="cd ../../site/edu/ess/project/user/rark444" 

我像這樣運行

./script_hdl

的腳本,但我沒有看到在終端任何迴應。我覺得我錯過了一些東西,但我不知道它是什麼。在此先感謝您的幫助。

+1

這不是一個別名的腳本。運行'。/ script_hdl'應該會給你一個錯誤,除非在當前目錄中存在具有該名稱的文件。如果你運行'script_hdl'來代替運行那個'cd'命令(它只會在任何目錄下都能正常工作)。 –

+0

是的,我在當前目錄下有script_hdl,這是我的主目錄。我從這裏讀取[http://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script]該命令不能用於腳本和如此使用的別名。但是,在運行此操作後,我沒有看到終端中目錄中的更改。所以如果是IDK,甚至運行cd命令。 –

+0

你想寫一個腳本或創建一個別名?他們是不同的東西。你有什麼是別名。它與一個同名的腳本沒有任何關係(唯一的聯繫是它們具有相同的名稱)。您可以在腳本中運行'cd',但它不會更改運行中的shell的目錄。你可以編寫一個別名來改變當前shell的目錄,但這不是一個腳本。 –

回答

1

您有兩種方法可以在此更改目錄。

腳本

第一個是編寫一個腳本,在這樣你可以cd後運行其他命令的方式。它的工作原理沒有alias命令:假設你刪除它。

cd命令適合正在運行的進程。當你執行你的腳本時,會發生以下情況:

  1. 你的shell產生了一個新的shell進程來執行你的代碼。主要過程等待其孩子完成;
  2. 這個新的子進程實際上確實使用您的cd命令更改了其自己的工作目錄,然後退出(已結束)
  3. 原始shell進程停止等待並再次打印提示。但此方法有改變目錄(僅那孩子的過程)

要執行你想要什麼,(去掉alias命令,然後)打電話給你的腳本如下:

source script_hdl 

或使用以下快捷方式:

. script_hdl 

這意味着您希望指令在相同的shell進程中運行。

別名

更改目錄的第二種方法是使用別名。但是,您不應該將別名定義寫入隨機腳本文件,而應將其添加到您的~/.bashrc中(而每次打開shell時都會運行此文件)。 所以:

alias script_hdl="cd ../../site/edu/ess/project/user/rark444" 

重裝~/.bashrc

. ~/.bashrc 

然後不要試圖從文件執行,只需啓動你的別名,就好像它是一個正常的命令:

script_hdl 
+0

讓我們忘記問題中提到的道路。所以我只在腳本文件cd/Desktop中有腳本文件,當我使用「source script_hdl」時,我沒有得到這樣的文件或目錄,當我使用「script_hdl」時,我得到/ bin /:權限被拒絕。但我在當前位置有名爲Desktop的文件夾。爲什麼它顯示沒有這樣的文件或目錄? –

+0

當您調用'source script_hdl'時,您正在採購腳本文件。如果它不在當前工作目錄中,則必須以這種方式添加路徑:'source/example/path/to/script_hdl'。對於第二個錯誤消息,我認爲這是由於您之前在終端中定義的別名。嘗試'。 。/ script_hdl',它不會調用別名(或從新的tty嘗試)。 – Qeole

0

確保拼寫正確,因爲unix區分大小寫並且您擁有權限。首先在命令行上嘗試一下,以確保它可以正常工作,如果出現錯誤,它將出現在命令行上,因爲有時腳本會隱藏錯誤和消息。如果有效,則將文本複製到腳本文件中,不要使用別名。

這裏是別名的正確用法

https://en.wikipedia.org/wiki/Alias_(command)

1

看起來像你試圖建立一個別名。您可以通過編輯在你的主目錄的的.bash_profile文件(如果它不存在,你可以創建一個,然後運行編輯程序後,「源的.bash_profile」)做到這一點,並作出這樣別名script_hdl =「CD中的條目../../site/edu/ess/project/user/rark444',然後從您的終端運行「script_hdl」

欲瞭解更多有關別名的信息,你可以訪問保羅提到的鏈接。