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

Shell 在用户输入bash脚本后运行cd命令不会更改目录,shell,Shell,我试图创建一个脚本,其中我有一个数字测试文件夹列表,并希望用户能够cd到其中一个后,输入文件夹编号 脚本正确地连接了输入,但在运行脚本时,它实际上没有执行cd命令到所需的目录 它会回显到屏幕上,但只是坐在那里,好像在等待进一步的提示 有人能告诉我我遗漏了什么吗?脚本“chgdir”如下所示: #!/bin/bash # # Script to move to test##dir (using input from user for dir number) echo "Enter test dir

我试图创建一个脚本,其中我有一个数字测试文件夹列表,并希望用户能够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


另外,我对bash脚本完全不熟悉,所以非常感谢您的帮助。

您的脚本所做的一切就是响应您生成的命令。您需要实际执行cd命令,并且只是回显它

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

变量名周围的{}允许shell将变量名与其后面附加的额外字符区分开来


这将更改脚本中的目录。要在以后应用它,您需要为脚本提供源代码(使用点“.”或“源代码”)以影响正在运行的shell

脚本所做的只是回显您生成的命令。您需要实际执行cd命令,并且只是回显它

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

变量名周围的{}允许shell将变量名与其后面附加的额外字符区分开来


这将更改脚本中的目录。要在以后应用它,您需要为脚本提供源代码(使用点“.”或“源代码”)以影响正在运行的shell

脚本只打印命令。这就是
echo
命令的全部功能。它不会执行它,因为你没有告诉它

通过将
echo
命令替换为以下命令,可以执行
cd
命令:

cd "/home/John/test${dirnum}dir"
但是如果这是脚本的最后一行,它将不会做任何有用的事情。在脚本中制作
cd
只会影响脚本本身

如果要从脚本中
cd
并使其在调用shell中生效,可以
source
脚本,而不是执行脚本:

. ./thescript
或者,您可以让脚本打印要执行的命令并
eval
其输出:

eval "`./thescript`"

(需要说明的是,如果使用
命令生成脚本,它需要执行
cd
命令;如果
val
其输出,脚本需要打印命令。)

您的脚本只打印命令。这就是
echo
命令的全部功能。它不会执行它,因为你没有告诉它

通过将
echo
命令替换为以下命令,可以执行
cd
命令:

cd "/home/John/test${dirnum}dir"
但是如果这是脚本的最后一行,它将不会做任何有用的事情。在脚本中制作
cd
只会影响脚本本身

如果要从脚本中
cd
并使其在调用shell中生效,可以
source
脚本,而不是执行脚本:

. ./thescript
或者,您可以让脚本打印要执行的命令并
eval
其输出:

eval "`./thescript`"

(需要明确的是,如果使用
命令生成脚本,它需要执行
cd
命令;如果
val
其输出,脚本需要打印命令。)

这将更改正在运行的shell脚本中的目录;它不会更改运行脚本的shell的目录。为此,您需要
。脚本
(或者,在Bash中,
源脚本
)。这将更改正在运行的shell脚本中的目录;它不会更改运行脚本的shell的目录。为此,您需要
。脚本
(或者,在Bash中,
源脚本
)。谢谢,这非常有用。正如你所说,这是开始时的“cd”,而不是“echo”,并且还将脚本作为/谢谢,那真的很有用。正如你所说,这是开始时的“cd”,而不是“echo”,并且还将脚本作为/chdir。