IT

'<' 연산자는 향후 사용을 위해 예약되어 있습니다.

itgroup 2023. 4. 8. 08:24
반응형

'<' 연산자는 향후 사용을 위해 예약되어 있습니다.

PowerShell을 사용하고 있으며 다음 명령을 실행하려고 합니다.

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

test.full은 test_cfdp.exe에 대한 명령줄 입력을 모방하는 스크립트입니다.다만, 다음의 에러가 표시됩니다.

The '<' operator is reserved for future use.

이 명령어를 PowerShell에서 동작시키기 위해 사용할 수 있는 다른 방법(cmdlet 등)이 있습니까?

PowerShell v1에서는 지원되지 않습니다.[v5에서는 아직 지원되지 않습니다...]

회피책의 예는 다음과 같습니다.

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

또, 다음의 조작도 시험해 주세요.

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

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

Windows 상에서 개발하여 Linux 상에서 전개하기 때문에 이 powershell 함수를 만들었습니다.위의 솔루션은 바이너리 파일을 복원해야 했기 때문에 적절하지 않습니다.bash-script의 지식은 다음에서 차용됩니다.bash를 호출하고 새 셸 내에서 명령을 실행한 다음 사용자에게 제어권을 반환하려면 어떻게 해야 합니까?

$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)

이 명령을 더 많이 실행하려면 원래 구문을 사용하여 *.bat 파일을 만들면 됩니다.그건 또 다른 해결책이에요.

PowerShell이 필수 사항이 아닌 경우 명령 프롬프트에서 명령을 실행하면 정상적으로 작동합니다.

언급URL : https://stackoverflow.com/questions/2148746/the-operator-is-reserved-for-future-use

반응형