我有一个bash脚本,该脚本会生成程序指令(@Transactional
,带有一堆参数)并将其打印到标准输出中。我想从powershell运行输出,以后可以选择附加其他参数。
我尝试过
docker run ...
但是我得到了错误
术语“ docker run --rm -ti [
]”未识别为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。
很明显,D:\> & $(wsl ./my-bash-script.sh) some more args
将整个输出解释为单个命令,而实际上,只有输出的第一个单词是命令。剩下的就是参数。
有没有办法做我想做的事?
答案 0 :(得分:1)
是的,&
仅支持命令名称或路径作为其第一个参数-您不能包含参数。
您需要的是Invoke-Expression
:
Invoke-Expression "$(wsl ./my-bash-script.sh) some more args"
注意:如果&
脚本输出带有带引号的可执行路径的命令,则只需要在字符串中插入.sh
。 < / p>
还请注意,PowerShell不会始终以类似于POSIX的外壳程序(例如Bash)的方式解释给定的命令行,因为它可以在参数的开头识别其他元字符。值得注意的是,PowerShell不会将前缀为@
或{
的参数用作文字。
顺便说一句:尽管这是Invoke-Expression
的合法用例-假设您信任.sh
脚本-Invoke-Expression should generally be avoided的输出。