为什么这个 bash 脚本会创建一个新目录?
Why does this bash script create a new directory?
我刚开始使用 bash 脚本(我只是在过去的几个小时里作为一个更大项目的一部分学习它),我正在尝试理解 [=] 中的这段代码20=] 脚本:
for newDir in `cat tempfile.list` ; do
dir=/Tree/Apples/$newDir
[ -d $dir ] || mkdir -p $dir/{log,err}
done
[-d $dir] 有什么作用?这段代码是否会在 Apples
目录中创建一个名为 dirName
的新目录?如果是这样,它为什么要这样做?我没有看到 mkdir dirName
的声明。有人可以大体解释一下语句 [ -d $dir ] || mkdir -p $dir/{log,err}
的作用吗?非常感谢您的帮助!
command1 || command2
是简写法
if ! command1
then
command2
fi
||
是逻辑测试带短路,类似于大多数编程语言;如果左操作数成功,则不执行右操作数。
[ -d $dir ]
测试名为 $dir
的目录是否已经存在。所以如果这个测试失败,它会执行 mkdir -p $dir/{log,err}
.
mkdir
创建目录,当它被赋予 -p
选项时,它将创建创建目标目录所需的任何中间目录。
逗号分隔列表两边的大括号用于自动重复命令的一部分,因此 $dir/{log,err}
是 $dir/log $dir/err
的快捷方式。所以完整的 mkdir 命令扩展为
mkdir -p $dir/log $dir/err
因此,此脚本所做的是创建 tempfile.list
中列出的所有尚不存在的目录,并在其创建的目录中创建 log
和 err
子目录。
我刚开始使用 bash 脚本(我只是在过去的几个小时里作为一个更大项目的一部分学习它),我正在尝试理解 [=] 中的这段代码20=] 脚本:
for newDir in `cat tempfile.list` ; do
dir=/Tree/Apples/$newDir
[ -d $dir ] || mkdir -p $dir/{log,err}
done
[-d $dir] 有什么作用?这段代码是否会在 Apples
目录中创建一个名为 dirName
的新目录?如果是这样,它为什么要这样做?我没有看到 mkdir dirName
的声明。有人可以大体解释一下语句 [ -d $dir ] || mkdir -p $dir/{log,err}
的作用吗?非常感谢您的帮助!
command1 || command2
是简写法
if ! command1
then
command2
fi
||
是逻辑测试带短路,类似于大多数编程语言;如果左操作数成功,则不执行右操作数。
[ -d $dir ]
测试名为 $dir
的目录是否已经存在。所以如果这个测试失败,它会执行 mkdir -p $dir/{log,err}
.
mkdir
创建目录,当它被赋予 -p
选项时,它将创建创建目标目录所需的任何中间目录。
逗号分隔列表两边的大括号用于自动重复命令的一部分,因此 $dir/{log,err}
是 $dir/log $dir/err
的快捷方式。所以完整的 mkdir 命令扩展为
mkdir -p $dir/log $dir/err
因此,此脚本所做的是创建 tempfile.list
中列出的所有尚不存在的目录,并在其创建的目录中创建 log
和 err
子目录。