Shell / Bash - 通过变量将输出管道输出到另一个脚本的输入中

时间:2012-10-15 21:03:58

标签: bash pipe

通常情况下,我会将事情分解为单独的操作,并将输出复制并粘贴到另一个输入中:

$ which git
/usr/local/bin/git
$ sudo mv git-credential-osxkeychain /usr/local/bin/git

任何快速入侵输入输入? 就像是: $echo which wget | sudo mv git-credential-osxkeychain

4 个答案:

答案 0 :(得分:1)

set -vx
myGit=$(which git)
gitDir=${myGit#/git} ; gitDir=${gitDir#/bin}/git
echo sudo mv git-credential-osxkeychain ${gitDir}

如果您确定这会执行您需要的操作,请移除最后一行的set -vxecho

可能减少所需的击键次数,但我认为这个版本更容易理解正在使用的技术以及它们的工作方式。

IHTH

答案 1 :(得分:0)

使用$(command)

命令替换
sudo mv git-credential-osxkeychain $(which git)

这会将命令替换为输出。您可以在http://tldp.org/LDP/abs/html/commandsub.html

中找到所有相关信息

答案 2 :(得分:0)

答案是Chirloshellter所说的。

为什么$echo which wget | sudo mv git-credential-osxkeychain不起作用是因为管道将stdout从上一个命令重定向到下一个命令的stdin。在这种情况下,move不接受来自stdin的输入。

奇怪的是which git返回

/usr/local/bin/git

但您正在将git-credential-osxkeychain移至

/usr/local/git/bin/

那两个不匹配。是否有拼写错误?

答案 3 :(得分:0)

如果您想使用管道语法,那么您应该查看xargs