我正在尝试创建一个脚本,我有一个数字测试文件夹列表,并希望用户在输入文件夹编号后能够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脚本,因为你可以告诉任何帮助真的很感激。
答案 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
输出,则脚本需要打印命令。)