【问题标题】:Running a cd command after user input in bash script will not change directory [duplicate]用户在 bash 脚本中输入后运行 cd 命令不会更改目录 [重复]
【发布时间】:2016-11-05 01:05:58
【问题描述】:

我正在尝试创建一个脚本,其中我有数字测试文件夹列表,并希望用户能够在输入文件夹编号后 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-PC ~/bin

P.S 如您所知,我对 bash 脚本完全陌生,因此非常感谢任何帮助。

【问题讨论】:

    标签: shell


    【解决方案1】:

    您的脚本所做的只是回显您形成的命令。您需要实际执行 cd 命令以及回显它。

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

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

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

    【讨论】:

    • 这将改变正在运行的 shell 脚本中的目录;它不会更改运行脚本的 shell 的目录。为此,您需要 . script(或者,在 Bash 中,source script)。
    【解决方案2】:

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

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

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

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

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

    . ./thescript
    

    或者你可以让脚本打印你想要执行的命令和eval它的输出:

    eval "`./thescript`"
    

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

    【讨论】:

    • 谢谢,这真的很有用。正如您所说,它是一开始的“cd”而不是“echo”,并且还将脚本采购为 . ./chdir.
    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 2015-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多