为什么〜/ .config或〜/ .bashrc被认为是bash中的目录?

时间:2018-03-20 21:15:27

标签: bash

我们被分配了一个与各种文件一起使用的项目。有问题的代码是:

if [[ -f $first_arg ]]; then
    open_file $first_arg
elif [[ -d $first_arg ]]; then
    search_directory $first_arg
.....

只使用常规文件它可以正常工作,但如果我像这样运行脚本(使用〜/。),它会进入第二个条件:

./script01.sh ~/.config

所以我想知道什么时候bash检查-f和-d,什么被认为是目录或文件,什么不再是。

1 个答案:

答案 0 :(得分:1)

~/.config通常是Joe在评论中建议的目录。

至于发生了什么,bash显然在有问题的文件上调用stat(2),返回包含st_mode字段的相应结构。有关详细信息,请参见inode(7)

The stat.st_mode field (for statx(2), the  statx.stx_mode  field)  con‐
tains the file type and mode.

即:

The following mask values are defined for the file type:
...
    S_IFREG    0100000   regular file
    ...
    S_IFDIR    0040000   directory

剩下的就是检查设置了哪些位。