这是我的任务命令。
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 "
有人可以帮助我吗?
由于
答案 0 :(得分:7)
如果前一个命令运行没有错误,很可能你正在寻找一种执行下一个命令的方法。
&&
运算符检查退出状态并继续运行,如果它是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