一次执行多个unix命令

时间:2012-09-10 23:39:11

标签: unix

这是我的任务命令。

find -name myname.tar
tar -xvf myname.tar
rm -r myname/*

这些多行命令工作正常,但我需要一行命令。然后我用了这个命令,

find -name myname.tar | tar -xvf myname.tar | rm -r myname/*

我收到此错误:

"rm -r myname/*
rm: cannot remove `myname/*': No such file or directory "

有人可以帮助我吗?

由于

3 个答案:

答案 0 :(得分:7)

如果前一个命令运行没有错误,很可能你正在寻找一种执行下一个命令的方法。

  • 在UNIX中,来自命令行工具的错误通常会更改程序的退出状态
  • 在大多数UNIX shell中,&&运算符检查退出状态并继续运行,如果它是0(对于OK)

所以你想要的是

find -name myname.tar && tar -xvf myname.tar && rm -r myname/*

答案 1 :(得分:2)

有两种常见的方法可以做到这一点:

将命令与分号;一起加入,分号将一个接一个地运行命令。

echo "Hello"; false; echo "There";
>> Hello
>> There

另一个是带&&

的连接命令

&&只会执行下一个命令,如果前一个命令的退出代码为零。

echo "Hello" && false && echo "There";
>> Hello

'|'符号完全不同。它运行这两个命令,感觉标准符合stdout的标准,进入另一个stdin的标准。 (wc -w计算stdin中的字数。)

echo "Two Words" | wc -w
>> 2

答案 2 :(得分:1)

您使用的(|)被称为对等体,它将数据从一个命令传递到另一个命令。对于前:

$ cat test.php | grep '<'
<?php

一个接一个地运行几个命令,你可以使用';':

echo 123; echo 456

或者如果您希望您的命令取决于彼此的成功,您可以'&amp;&amp;':

$ eho 123; echo 456
eho: command not found
456

$ eho 123 && echo 456
eho: command not found