在Powershell中将管道作为参数发送到外部程序?

时间:2018-06-12 02:55:10

标签: powershell

运行命令以查找路径中最近修改的目录时,我一直收到以下错误:从PowerShell远程执行:

head:术语“head”不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

At line 1: char: 95
+ ... d /somedir ; (lastmod=$(ls -tda -- */ | head -n 1); ....

我正在按照以下方式运行代码:

& plink "bob@server" "cd /somedir ; (lastmod=$(ls -tda -- */ | head -n 1); ls -la $lastmod)"

2 个答案:

答案 0 :(得分:2)

您已将命令封装在双引号中,因此PowerShell正在扩展$符号。如果你使用单引号,这将不会发生。

答案 1 :(得分:0)

为了补充布鲁斯的答案,你还可以使用重写词(`)来逃避双引号字符串中的特殊字符,这是powershell中的转义字符。

& plink "bob@server" "cd /somedir ; (lastmod=$(ls -tda -- */ `| head -n 1); ls -la $lastmod)"

这意味着如果您确实需要字符串中的任何变量,您仍然可以使用特殊字符。