2016-07-02 61 views
0

我想創建一個腳本,其中我有數值試驗的文件夾列表,並希望用戶能夠cd到其中的一個輸入文件夾編號後。運行cd命令後,在bash腳本用戶輸入不會改變目錄

腳本正確地連接輸入,但上運行它實際上並沒有執行cd命令所需的目錄腳本?

它呼應的屏幕,但然後就坐在那裏,彷彿在等待進一步提示?

任何人都可以提醒我缺少的東西嗎?腳本「chgdir」是如下:

#!/bin/bash 
# 
# Script to move to test##dir (using input from user for dir number) 
echo "Enter test directory number as ## and hit Return" 

read dirnum 

echo "cd /home/John/test$dirnum""dir" 

但是在運行該腳本的命令輸出到屏幕上,但並沒有「CD」,只是停留在〜/斌?

CD /家庭/約翰/ test01dir

約翰@約翰-PC〜/ bin中

P.S我完全新的bash的腳本,你可以告訴因此任何幫助非常感激。

回答

1

您的所有腳本都會回顯您形成的命令。您需要實際執行cd命令以及回顯它。

CD /家庭/約翰/測試$ {} dirnum DIR

的{}周圍的變量名可以讓外殼從後追加額外字符區分變量名。

這將改變腳本內的目錄。擁有它之後申請,您將需要源腳本(用點「」或‘源’),以影響正在運行的外殼。

+0

這將改變正在運行的shell腳本中的目錄;它不會更改運行腳本的shell的目錄。爲此,你需要'。腳本「(或者,在Bash中,」源腳本「)。 –

0

你的腳本只是打印命令。這就是所有的echo命令。它不執行它,因爲你沒有告訴它。

您可以通過此更換echo命令執行cd命令:

cd "/home/John/test${dirnum}dir" 

但是,如果這是你的腳本的最後一行,也不會做任何有用的事情。在腳本內部執行cd不會影響腳本本身。

如果你想cd從腳本,並使其採取調用shell效果,可以source腳本,而不是執行它:

. ./thescript 

你可以有腳本打印命令要執行和eval其輸出:

eval "`./thescript`" 

(需要明確的是,如果你使用.命令源腳本,它需要給exec使用命令cd;如果您val其輸出,腳本需要打印的命令。)

+0

謝謝,這真的很有用。正如你所說,這是'cd'的開始,而不是'回聲',並且也是腳本的來源。 ./chdir。 – JFL