![无法根据用户输入验证目录](https://linux22.com/image/167368/%E6%97%A0%E6%B3%95%E6%A0%B9%E6%8D%AE%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%E9%AA%8C%E8%AF%81%E7%9B%AE%E5%BD%95.png)
我试图提示用户重复输入一个目录,然后脚本将检查该目录是否存在,如果不存在,则继续提示,直到用户输入有效的目录。
我的代码:
#!/bin/bash
while :
do
echo "Enter a directory:"
read directory
if [ -f $directory ]
then
cd $directory
break
else
echo "Directory does not exists, please try again."
fi
done
现在的问题是,即使我输入有效的目录(例如 /home/username),它仍然在循环而不是更改该目录,知道出了什么问题吗?
答案1
我按照你输入的代码运行,效果很好,不过我将 -f 改为 -d,因为你想检查目录。你必须使用 source 内置命令来运行 shell 脚本
$ source script_name.sh
cd 命令运行在子 shell 环境中,因此执行该命令时,根据 if 语句测试,如果 $directory 有效,则目录会发生更改。
当子 shell 环境将控制权返回给父 shell 时,环境中的更改(cd $directory)不会传递到父 shell。因此,您只需保留在同一目录中即可。
Source 将在当前 shell 本身中运行脚本,因此如果成功执行 cd 命令,则更改是可见的。