【发布时间】:2015-12-18 02:24:15
【问题描述】:
我有一个 bash 脚本,它可以将一堆命令创建为一个文本文件。然后将cats 文件放入sh 以运行命令。我要做的只是在目录不存在的情况下运行命令。
这是我所拥有的:
一个类似这样的文本文件:
mkdir /path/to/a/directory
mkdir /path/to/another/directory
mkdir /path/to/yet/another/directory
在我的脚本中我有这样一行
cat /path/to/my/file.txt | sh
但是有没有办法做这样的事情?
cat /path/to/my/file.txt | if path already exists then go to the next, if not | sh
换句话说,如果路径已经存在,我想跳过创建目录的尝试。
【问题讨论】:
-
无法将命令通过管道传输到
if。你的项目听起来过于雄心勃勃。获得一个更简单的版本,并决定是否真的值得努力重建 shell 脚本范例;-)。 dir 存在的传统测试是if ! [[ -d "$dir" ]] ; then mkdir -p "$dir" ; fi。祝你好运。 -
问题不在于你不能通过管道传递给
if语句(你可以),而是你真的需要一个循环。 -
@chepner :您可以通过管道传递到
if语句!?酷,你能在这里给出一个 1/2 衬里的例子作为评论吗?谢谢 -
这并不像你想象的那么令人兴奋;
if不使用其打开的文件句柄,而只是将它们传递给其中包含的任何命令。somecommand | if [ -f output.txt ]; then cat >> output.txt; else cat > output.txt; fi。在>>不会创建文件的世界中,这个玩具示例会将命令的输出写入或附加到输出文件中。cat命令从if继承其标准输入。
标签: linux bash if-statement pipe sh