powershell '〈'运算符保留供将来使用

ee7vknir  于 2023-04-30  发布在  Shell
关注(0)|答案(6)|浏览(191)

我正在使用PowerShell并尝试运行以下命令:

.\test_cfdp.exe < test.full | tee test.log

full是模仿test_cfdp命令行输入脚本。但是,我得到以下错误:

The '<' operator is reserved for future use.

有没有别的办法(i)e. cmdlet)可以用来使此命令在PowerShell中工作吗?

clj7thdc

clj7thdc1#

这个was not supported in PowerShell v1 [和截至v5,它仍然不是。..]
解决方法示例如下:

Get-Content test.full | .\test_cfdp.exe | tee test.log
zlwx9yxi

zlwx9yxi2#

也可以试试:

cmd /c '.\test_cfdp.exe < test.full | tee test.log'
0ejtzxu1

0ejtzxu13#

在PowerShell版本7中,您仍然需要使用Get-Content来获取指定位置中项目的内容。例如,如果要将文件加载到Python脚本中并将结果写入文件。使用此构造:

PS > Get-Content input.txt | python .\skript.py > output.txt

或显示并保存在文件中:

PS > Get-Content input.txt | python .\skript.py | tee output.txt

或者切换到cmd以使用'〈'运算符:

C:\>python .\skript.py < input.txt > output.txt
ymdaylpp

ymdaylpp4#

如果PowerShell不是强制性的,则在命令提示符下运行命令可以正常工作。

axkjgtzd

axkjgtzd5#

因为我在windows上开发,在linux上部署,所以我创建了这个powershell函数。上面的解决方案不合适,因为二进制文件,我必须恢复.bash脚本的知识来自:How to invoke bash, run commands inside the new shell, and then give control back to user?

$globalOS = "linux" #windows #linux

function ExecuteCommand($command) {
    if($command -like '*<*') {
        #Workaround for < in Powershell. That is reserved 'for future use'
        if ($globalOS -eq "windows") {
            & cmd.exe /c $command
        } else {
            $wrappercommand = "''" + $command + " ; bash''"
            & bash -c $wrappercommand
        }
    } else {
        Invoke-Expression $command
    }
}

$command = "docker exec -i mydockerdb pg_restore -U postgres -v -d mydatabase < download.dump"
ExecuteCommand($command)
ogsagwnx

ogsagwnx6#

如果你想运行这个命令更多次,你可以只做一个 *。使用原始语法的bat文件。这是另一个解决方案。

相关问题