其实我对bash编程知之甚少。我读过管道允许我们使用程序的输出作为另一个的输入。然后,我预计一些语句,比如娄作品:如何与bash上的系统调用共享参数?
echo "newdirectory" | (mkdir && cd)
凡mkdir
从echo
接收outputed字符串作为其第一个参数,cd
太之后。另一点是管道不能从左边的进程同步执行(是吗?)。
有一种方法可以通过bash上的系统调用重用参数吗?
特别是在这种情况下创建一个新的目录并改变它。
其实我对bash编程知之甚少。我读过管道允许我们使用程序的输出作为另一个的输入。然后,我预计一些语句,比如娄作品:如何与bash上的系统调用共享参数?
echo "newdirectory" | (mkdir && cd)
凡mkdir
从echo
接收outputed字符串作为其第一个参数,cd
太之后。另一点是管道不能从左边的进程同步执行(是吗?)。
有一种方法可以通过bash上的系统调用重用参数吗?
特别是在这种情况下创建一个新的目录并改变它。
您可以为此使用变量,并将命令行参数传递给两个命令mkdir和cd,而不是尝试将数据传输到这些命令。
MYDIR="newdirectory"
mkdir "$MYDIR" && cd "$MYDIR"
有了这个,
echo "newdirectory" | (mkdir && cd)
您同时连接的mkdir和CD的标准输入。一个程序/命令需要知道 是否应该从stdin读取数据,以及如何处理它。 mkdir
或cd
命令都没有这样做,他们希望你给他们命令行参数。
即使在命令可以从标准输入读取数据的情况下,在这种情况下,mkdir
会消耗输入,并且不会为cd
留下任何内容。在其他情况下,如果将相同的管道连接到多个命令/进程,则无法确定其中哪一个会读取数据。
此外,(mkdir && cd)
中的圆括号表示这些命令在子shell中运行。但是cd
仅影响当前shell,因此您将无法观察到cd
命令的任何影响。
感谢您的解释。 –
mkdir `echo NewDirectorName`
也使用程序的输出作为另一个程序的参数。
完成此操作的另一种方法是使用xargs
命令。
echo NewDirectoryName | xargs mkdir
@ nos的回答对你的情况来说是最正确的。
不是普遍适用的,但您可以在问题的示例中使用'$ _'。 '$ _'扩展为前一个命令的* last *参数,所以'mkdir“newdirectory”&& cd“$ _”'将是等价的。 – chepner
@chepner虽然nos的答案更加完整和教诲,但您的评论填补了我在寻找的内容。 –