标签: exit-code

从远程系统上的 Invoke-Command 捕获 Write-Host 输出和退出代码

我有一个位于远程系统上的脚本。

在服务器“web12”上的 C:\tmp\hgttg.ps1 下:

 Write-Host "Don't Panic"
 exit 42
Run Code Online (Sandbox Code Playgroud)

我使用 Invoke-Command 从本地机器(两个系统都运行 v4.0)调用此脚本:

$svr = "web12"
$cmd = "C:\tmp\hgttg.ps1"
$result = Invoke-Command -ComputerName $svr -ScriptBlock {& $using:cmd}
Run Code Online (Sandbox Code Playgroud)

执行时会产生以下输出:

> $result = Invoke-Command -ComputerName $svr -ScriptBlock {& $using:cmd}
Don't Panic
> $result
>
Run Code Online (Sandbox Code Playgroud)

($result未设置,输出直接到控制台,不好!)经过大量的网络搜索和故障排除,我得到了一些改进:

> $result = Invoke-Command -ComputerName $svr -ScriptBlock {& $using:cmd; $LASTEXITCODE}
Don't Panic
> $result
42
>
Run Code Online (Sandbox Code Playgroud)

现在我可以捕获返回代码,但输出仍然直接发送到控制台。这是我所能得到的。在我已经尝试过的一长串事情中,以下任何一项都不起作用:

  • 使用“Invoke-Expression”和 -OutVariable out 代替“&”;新对象 -TypeName PSCustomObject -Property @{code=$LASTEXITCODE; 输出=$out}

这会产生输出:

> $result
code           : 42
output         : 
PSComputerName : web12 …
Run Code Online (Sandbox Code Playgroud)

powershell exit-code powershell-remoting powershell-4.0 write-host

3
推荐指数
1
解决办法
5372
查看次数

如何在Delphi中退出时显示最终表格?

对于某人来说,这应该是一个简单的.我只是想不出怎么做.

退出我的程序后,我想隐藏主表单并自行显示最终的"谢谢"表单,如下所示:

procedure TMainForm.ExitExecute(Sender: TObject);
begin
  MainForm.Visible := false;
  ThankYouForm.Show;
  MainForm.Close;
end;
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我得到了例外:

EInvalid操作:无法在OnShow或OnHide中更改Visible

那么如何在退出Delphi中的程序时隐藏主窗体时如何显示最终窗体?


结论:Mghie证实我所尝试的是正确的,应该有效.这表明我在退出和关闭我的表单的程序中的某个地方出现了一个错误.

现在我知道了,找到并解决问题并不需要花很长时间.


发现问题:我正在从ThankYouForm中关闭我的主要表单,并以某种方式回到ExitExecute,并且,它完全被束缚了.

但一切都很好.ThankYouForm.ShowModal之前的MainForm.Hide工作正常.

伙计们,再次感谢

forms delphi exit-code

2
推荐指数
1
解决办法
1201
查看次数

从Perl中的STDIN捕获退出状态

我有一个使用如下命令运行的perl脚本:

/path/to/binary/executable | /path/to/perl/script.pl
Run Code Online (Sandbox Code Playgroud)

该脚本对二进制文件的输出执行有用的操作,然后在STDIN用完后退出(<>返回undef).除非二进制文件以非零代码退出,否则这一切都很好.从脚本的POV开始,它认为脚本刚刚结束,所以它清理并退出,代码为0.

有没有办法让perl脚本看到退出代码是什么?理想情况下,我想要这样的东西工作:

# close STDIN, and if there was an error, exit with that same error.
unless (close STDIN) {
   print "error closing STDIN: $! ($?)\n";
   exit $?;
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这似乎不起作用:

$ (date; sleep 3; date; exit 1) | /path/to/perl/script.pl /tmp/test.out
Mon Jun  7 14:43:49 PDT 2010
Mon Jun  7 14:43:52 PDT 2010
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

有没有办法让它做我的意思?

编辑添加:

perl脚本实时操作二进制命令的输出,因此将其全部缓冲到文件中是不可行的解决方案.但是,它不需要知道退出代码,直到脚本结束.

perl pipe exit-code

2
推荐指数
1
解决办法
2253
查看次数

程序退出状态

我对Linux中的程序退出状态有疑问.在我的程序中,我分叉子进程并调用waitpid以获取它.当waitpid返回时,我想检查我的子进程的退出状态.我转向手动寻求帮助,发现第二个参数waitpid将保持退出状态,我可以使用宏WEXITSTATE来读取它.但是,这个宏只提取实际退出状态的最低有效8位,而在函数手册中exit(int ret_val),它将退出ret_val & 0x377,而不是最低有效8位.

我的问题是,其他更多的位在哪里?我们只是放弃它们吗?为什么Linux采用这种策略?这个实现不会给我们的程序带来麻烦吗?

谢谢和最诚挚的问候.

c linux exit-code exit

2
推荐指数
1
解决办法
742
查看次数

ios - 干净后"libtool以退出代码1失败"

我正在做一个项目,一切顺利,直到我决定清理我的项目.

仅当我在模拟器上运行我的应用程序时才会出现以下错误(在真实设备上正常运行):

Libtool /Users/Yaman/Library/Developer/Xcode/DerivedData/Homeless-gujyzhsiwenufvedlinbbtrizcpd/Build/Products/Debug-iphonesimulator/libShareKit.a normal i386
    cd "/Users/Yaman/Documents/iOS - App à vendre/Homeless/Submodules/ShareKit"
    setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static -arch_only i386 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk -L/Users/Yaman/Library/Developer/Xcode/DerivedData/Homeless-gujyzhsiwenufvedlinbbtrizcpd/Build/Products/Debug-iphonesimulator -filelist "/Users/Yaman/Library/Developer/Xcode/DerivedData/Homeless-gujyzhsiwenufvedlinbbtrizcpd/Build/Intermediates/ShareKit.build/Debug-iphonesimulator/Static Library.build/Objects-normal/i386/ShareKit.LinkFileList" -ObjC -all_load -lCopy -lDelicious -lDiigo -lEmail "-lEvernote SDK" -lEvernote -lFacebook "-lFlickr SDK" -lFlickr -lFoursquareV2 "-lGoogle Reader" -lInstagram -lInstapaper -lJSONKit -lKippt -lLinkedIn -lLogout -lOAuth "-lOpen in Safari" -lPinboard -lPrint -lReachability "-lRead It Later" "-lSave to Album" -lShareKitCore "-lSina Weibo" -lSSKeyChain "-lText Message" -lTumblr -lTwitter -lVKontakte -o /Users/Yaman/Library/Developer/Xcode/DerivedData/Homeless-gujyzhsiwenufvedlinbbtrizcpd/Build/Products/Debug-iphonesimulator/libShareKit.a

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: -dynamic not specified, -all_load invalid …
Run Code Online (Sandbox Code Playgroud)

exit-code armv7 ios sharekit libtool-xcode

2
推荐指数
1
解决办法
6541
查看次数

在文件中运行退出命令和终端之间的区别是什么

如果我exit在终端中运行命令,那么终端将退出并自行关闭.
如果我运行以下命令,则终端不会自行关闭(请注意exit在if-else命令中使用命令:

#!/bin/bash
a=1
if [ $a -eq 1 ]
then
echo i am true
exit
else
echo i am false
fi
Run Code Online (Sandbox Code Playgroud)

注意:我在上面的代码中使用if-else条件只是为了演示,它与我的问题无关.
如果您认为此问题有问题,请发表评论,请不要评分为-1.

linux bash exit-code

2
推荐指数
1
解决办法
91
查看次数

C退出代码和实时/非批处理应用程序中的atexit()

我正在编写一个游戏,其中许多不同的条件可能导致失败,例如图像或着色器无法加载,OpenGL无法获得有效的上下文等.

在理想的世界中,我想以我认为用于C的方式使用退出代码,即对于故障条件非零.但是,有一些因素可以解决这个问题:

  • 在使用非零退出代码时,atexit()不会被调用,不幸的是,因为我的程序清理是通过单个atexit()注册进行分层处理的main(),我喜欢.
  • 在我看来,鉴于应用程序的性质 - 游戏具有与批处理程序不同的无限运行时间 - 实际上可能永远不会出现实际使用退出代码的情况.它不像是由Makefile调用的命令行图像转换器,它需要通过其退出代码知道程序是成功还是失败,从而确定是否继续构建.可能的情况是,如果程序在运行时出现任何问题,例如丢失文件,这是我自己解决的问题,那么就顺利进行.

在我的情况下,使用非零退出代码可以支持和反对哪些参数?

c error-handling exit-code exit atexit

2
推荐指数
1
解决办法
1139
查看次数

Bash条件基于退出命令代码

在Bash中,我想要一个if语句,它基于运行命令的退出代码.例如:

#!/bin/bash

if [ ./success.sh ]; then
    echo "First: success!"
else
    echo "First: failure!"
fi

if [ ./failure.sh ]; then
    echo "Second: success!"
else
    echo "Second: failure!"
fi
Run Code Online (Sandbox Code Playgroud)

success.sh

#!/bin/bash

exit 0
Run Code Online (Sandbox Code Playgroud)

failure.sh

#!/bin/bash

exit 1
Run Code Online (Sandbox Code Playgroud)

这应打印出来:

First: success!
Second: failure!
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?谢谢!

bash shell command process exit-code

2
推荐指数
2
解决办法
1919
查看次数

确定进程是否被bash中的信号杀死

考虑以下两个C程序:

#include <signal.h>

int main(void) {
    raise(SIGTERM);
}
Run Code Online (Sandbox Code Playgroud)
int main(void) {
    return 143;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行任何一个,则$?bash中的值将为143。但是,通过waitsyscall可以区分它们:

wait4(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGTERM}], 0, NULL) = 11148
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 143}], 0, NULL) = 11214
Run Code Online (Sandbox Code Playgroud)

bash显然使用了这一知识,因为第一个导致将结果Terminated打印到终端上(奇怪的是,即使我将stdout和stderr都重定向到其他地方,也会发生这种情况),而第二个则没有。如何区分这两种情况与bash脚本?

bash signals exit-code

2
推荐指数
2
解决办法
181
查看次数

从命名管道捕获非零退出代码

tmp.sh即使发送到命名管道的进程失败,以下玩具脚本()也会以代码0退出.如何从命名管道捕获非零退出代码?或者更一般地说,事情出了问题?

#!/bin/bash

set -eo pipefail

mkfifo mypipe
FOOBAR > mypipe &

cat mypipe
Run Code Online (Sandbox Code Playgroud)

运行并检查退出代码:

bash tmp.sh
tmp.sh: line 6: FOOBAR: command not found

echo $? # <- Exit code is 0 despite the "command not found"!
Run Code Online (Sandbox Code Playgroud)

bash exit-code named-pipes

2
推荐指数
1
解决办法
135
查看次数