Shell 在用户输入bash脚本后运行cd命令不会更改目录
我试图创建一个脚本,其中我有一个数字测试文件夹列表,并希望用户能够cd到其中一个后,输入文件夹编号 脚本正确地连接了输入,但在运行脚本时,它实际上没有执行cd命令到所需的目录 它会回显到屏幕上,但只是坐在那里,好像在等待进一步的提示 有人能告诉我我遗漏了什么吗?脚本“chgdir”如下所示: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
#!/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。