我有一个问题,一直困扰我几个小时。我使用getopt创建了一个参数--file-dir
,它为程序分配了一个目录。在参数之后,用户可以选择他们喜欢的目录。为了保持程序稳定,我检查该目录是否存在。以下代码是我目前的代码,它始终返回"目录不存在。终止&#34。即使我搜索我的/home
目录。
-a|--file-dir) FILE_DIR=$2 ;
if [ ! -d "$FILE_DIR" ]; then
echo "Directory does not exist. Terminating." ;
exit 1;
else
echo "Directory exists." ;
fi ;
shift;;
非常感谢任何输入。 getopt可以正常使用echo测试,但在检查目录时会失败。
答案 0 :(得分:0)
检查你是否真的拥有正确的论据是个好主意:
-a|--file-dir) FILE_DIR=$2 ;
if [ ! -d "$FILE_DIR" ]; then
echo "Directory \"$FILE_DIR\" does not exist. Terminating." ;
exit 1;
else
echo "Directory exists." ;
fi ;
shift;;
如果不是肯定问题不在检查器中,而是在你的参数解析循环中的某个地方。
答案 1 :(得分:0)
我遇到了同样行为的问题:检查命令行中的目录是否按预期工作,但在脚本中完成时总是失败。
我在Windows的git bash下运行此脚本:
while read -r i; do
[ ! -d "$i" ] && echo "No $i"
done < "$1"
Windows'行结尾(\r\n
)在分割行时可能会导致问题。每项测试实际上都会检查directory\r
而不是directory
。因此,我需要使用正确的分隔符运行read
命令:
while IFS=$'\r\n' read -r i; do
OP也可能有类似的问题,其中不可打印的字符妨碍了。