2016-05-18 282 views
0

內工作,我希望得到的日期時間,並作出如此命名,然後cd這個目錄的目錄。cd命令不bash腳本

這是我的bash腳本:

t=$(date +%F-%H%M%S) 
mkdir $t 
cd $t 

,但它不完全工作。

它創建了一個目錄,但cd命令不起作用。

截圖:

screenshot of command prompt

+1

是什麼意思「它不工作」?它完美的作品。如果您需要任何幫助,請描述它的實際行爲。 「它不工作」是無稽之談。 –

+0

最後一行「cd」命令不起作用,運行此腳本之前是在主文件夾「〜」中,並在主文件夾中運行此腳本。 – KBKai

+1

再次。它工作得很好。除非你描述它的真實行爲(錯誤消息等),否則沒有人能夠幫助你。正如我寫的「它不工作」是一個垃圾* t。 –

回答

0

你正在運行一個子shell腳本。

與腳本中運行cd的問題是,它會創建該目錄啓動子shell。當腳本結束時,你的subshel​​l也是如此,當你運行腳本時,你又回到了你開始的地方。所以它是這樣的:

  1. 啓動腳本
  2. 子shell創建
  3. 創建目錄
  4. 更改目錄
  5. 端腳本
  6. 結束子shell
  7. 回到起點

你可以證明cd在腳本中起作用,並且當你通過留下標記來執行你的腳本時你在那個目錄中。

t=$(date +%F-%H%M%S) 
mkdir $t 
cd $t 
echo "I'm here" > inside.txt 

現在當腳本結束時,您會回到開始腳本的位置。但是如果您將cd添加到目錄中,並運行ls,則會看到您創建的文件。


爲@Dawid Ferenczy指出,實際上你可以source這個腳本到當前的外殼,而不是運行一個子shell,如:

source test.sh 
+0

這取決於你如何執行腳本。如果你使用'source',它將使用當前的shell,腳本結束後你將進入新創建的目錄。 –

+0

@DawidFerenczy看看OP的屏幕截圖,他們正在用'sh'運行它# –

+0

你實際上完成了問題的回答。但是你應該使用雙引號。 Hes以root身份測試shell腳本,不能太小心。 – Argonauts