在Bash脚本中检查目录是否总是失败

时间:2014-05-27 05:00:17

标签: bash directory getopt

我有一个问题,一直困扰我几个小时。我使用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测试,但在检查目录时会失败。

2 个答案:

答案 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也可能有类似的问题,其中不可打印的字符妨碍了。