1

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

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

有什么快速的技巧可以将输出转换为输入吗?就像是: $echo which wget | sudo mv git-credential-osxkeychain

4

4 回答 4

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

当您确定这会执行您需要的操作时,请删除最后一行的set -vx和。echo

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

IHTH

于 2012-10-15T21:29:53.480 回答
0

使用命令替换$(command)

sudo mv git-credential-osxkeychain $(which git)

这用命令代替了它的输出。您可以在http://tldp.org/LDP/abs/html/commandsub.html中找到所有相关信息

于 2012-10-15T21:08:24.160 回答
0

答案将是Chirloshellter所说的。

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

一个奇怪的事情是which git返回

/usr/local/bin/git

git-credential-osxkeychain但你要搬到

/usr/local/git/bin/

这两个不匹配。有错字还是什么?

于 2012-10-15T23:54:38.010 回答
0

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

于 2012-10-16T17:08:47.833 回答