如果我要从powershell脚本启动一个外部程序然后启动另一个程序,第一个程序是否会在运行下一个命令之前等待退出?
例如:
# Assume pagent loaded our key...
& {
& pscp -sftp "<some-path>\text*.json" nonroot@somehost:/home/nonroot/json ;
Write-Output $LASTEXITCODE;
& plink nonroot@somehost "/bin/processJSON.sh /home/nonroot/json";
Write-Output $LASTEXITCODE;
}
答案 0 :(得分:1)
在Windows上,PowerShell将始终同步等待控制台应用程序完成。对于Win32应用程序,如果未重定向该命令的输出,则该命令将异步运行。如果重定向,则PowerShell将等待命令完成。例如,从命令行运行notepad
将启动与PowerShell异步运行的记事本,但如果您运行notepad | out-null
,则PowerShell将等待记事本进程退出,然后再继续。在Linux或MacOS上,“windows”和“非windows”应用程序之间没有操作系统区别,因此PowerShell始终等待子进程完成。因此,除非应用程序将自己置于后台(很多GUI工具都会这样做),否则在这些平台上,您必须使用&
作为后台作业显式运行该过程,例如: xedit &
。