1

这是我的任务命令。

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 "

有人可以帮我吗?

谢谢

4

3 回答 3

7

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

  • 在 UNIX 中,来自命令行工具的错误通常会改变程序的退出状态
  • 在大多数 UNIX shell 中,&&操作员检查退出状态并继续前进,如果是0(表示 OK)

所以你似乎想要的是

find -name myname.tar && tar -xvf myname.tar && rm -r myname/*
于 2012-09-10T23:48:19.887 回答
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
于 2012-09-10T23:47:10.560 回答
1

您使用的 (|) 称为对等点,它将数据从一个命令传递到另一个命令。例如:

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

要一个接一个地运行多个命令,您可以使用';':

echo 123; echo 456

或者如果你希望你的命令依赖于彼此的成功,你可以'&&':

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

$ eho 123 && echo 456
eho: command not found
于 2012-09-10T23:43:08.223 回答