测试文件夹是否存在未按 shell 脚本中的预期工作

问题描述 投票:0回答:1

我正在尝试检查用户指定的输入中是否存在目录。我尝试使用

test -d <path_to_dir>
,然后使用
$? -eq 1
检查命令是否成功。但这似乎并没有达到预期的效果。

问题是,第一次输入有效路径时,我得到了错误的路径输出。如果我第二次重新输入相同的有效路径,它就会通过。

为什么会发生这种情况?我缺少什么?如果这不是一个好的实践,我如何使用类似的东西来实现这一点?

这是我的代码:

read -p "Specify the path under which folder(s) need to be created: " var_dir_path
test -d var_dir_path
while [[ $? -eq 1 ]]; do
    read -p "Path specified is incorrect or directory does not exist. Try again: " var_dir_path
    test -d $var_dir_path
done

我尝试通过添加 echo $? 进行调试在第一个测试命令之后,如下所示

read -p "Specify the path under which folder(s) need to be created: " var_dir_path
test -d var_dir_path
echo $?
while [[ $? -eq 1 ]]; do
    read -p "Path specified is incorrect or directory does not exist. Try again: " var_dir_path
    test -d $var_dir_path
done

令我惊讶的是,

echo $?
返回 1,即使路径是存在的有效目录。我不确定为什么会发生这种情况。

shell
1个回答
0
投票

您在第一次测试中缺少变量引用中的

$
。这是测试是否存在名为“var_dir_path”的目录:

test -d var_dir_path

这是更正后的版本:

read -p "Specify the path under which folder(s) need to be created: " var_dir_path
test -d var_dir_path
while [[ $? -eq 1 ]]; do
    read -p "Path specified is incorrect or directory does not exist. Try again: " var_dir_path
    test -d $var_dir_path
done
© www.soinside.com 2019 - 2024. All rights reserved.