2017-04-05 426 views
1

在linux下,可以做T这样的:的Windows CMD传递一个命令的输出作为参数传递给另一个

git diff $(git status -s -b | sed -n '2p' | cut -d' ' -f2-) 

或简单的情况

ls $(pwd) 

问题是我怎么能达到同样的在Windows中? (不使用批处理文件,命令提示符中的单行文本)。并非所有命令都支持管道,因此我们如何评估一个并将结果作为参数传递给另一个?

我试过管道和<>但没有工作。

git diff < (git status -s -b | sed -n '2p' | cut -d' ' -f2-) 

试试你自己,它期望一个文件。而|无法正常工作或为git diff不支持它

git status -s -b | sed -n '2p' | cut -d' ' -f2- | git diff // results in illegal seek 
+0

在Windows中使用双引号而不是单引号(如在Linux上)。 – user2956477

+0

尝试使用'^'转义管道,即'-s -b^| sed' –

回答

2

有一个在cmd没有$运营商。
重定向操作符(<>>>)预计文件或流句柄。
|通过标准输出的命令转换成另一种一个的标准输入的管。

A for /F loop但能够捕获命令的输出并将其提供给变量引用(示例中的%A);请参阅以下代码:

for /F "usebackq delims=" %A in (`git status -s -b ^| sed -n '2p' ^| cut -d' ' -f2-`) do git diff %A 
+0

这正是我所期待的。更新'for for/F“usebackq delims =”%A in(\'git status -s -b^| sed -n'$ 1p'^ | cut -d“”-f3 \')do git diff%A $ 2 $ 3 $ 4'($ n是这个别名的命令行参数),它会根据'git status'输出的数字来区分正确的文件 – Arijoon

相关问题