在bash脚本中输入用户后运行cd命令不会更改目录

时间:2016-07-02 23:40:10

标签: shell

我正在尝试创建一个脚本,我有一个数字测试文件夹列表,并希望用户在输入文件夹编号后能够cd到其中一个。

脚本正确连接输入但是在运行脚本时它实际上并没有执行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”并且只是保留在〜/ bin中?

cd / home / John / test01dir

John @ John-PC~ / bin

P.S我是一个全新的bash脚本,因为你可以告诉任何帮助真的很感激。

2 个答案:

答案 0 :(得分:1)

你所做的所有脚本都是为了回应你形成的命令。您需要实际执行cd命令以及回显它。

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

变量名称周围的{}允许shell区分变量名称和后面附加的额外字符。

这将改变脚本内的目录。要在之后应用它,您需要获取脚本(使用点“。”或“source”)来影响您正在运行的shell。

答案 1 :(得分:0)

您的脚本只打印命令。所有echo命令都有。它没有执行它,因为你没有告诉它。

您可以通过将cd命令替换为:

来执行echo命令
cd "/home/John/test${dirnum}dir"

但如果这是你脚本的最后一行,它就不会做任何有用的事情。在脚本中执行cd并不会影响脚本本身以外的任何内容。

如果你想从脚本中cd并让它在调用shell中生效,你可以source脚本而不是执行它:

. ./thescript

您可以让脚本打印您要执行的命令并输出eval

eval "`./thescript`"

(很明显,如果使用.命令获取脚本,则需要执行cd命令;如果val输出,则脚本需要打印命令。)