如果使用-File参数调用,Powershell将在发生错误时返回0退出代码.这意味着我的构建是绿色的,它不应该是:(
例如:
(在wtf.ps1中)
$ErrorActionPreference = "Stop";
$null.split()
Run Code Online (Sandbox Code Playgroud)
(CMD)
powershell -file c:\wtf.ps1
You cannot call a method on a null-valued expression.
At C:\wtf.ps1:3 char:12
+ $null.split <<<< ()
+ CategoryInfo : InvalidOperation: (split:String) [], ParentConta
insErrorRecordException
+ FullyQualifiedErrorId : InvokeMethodOnNull
echo %errorlevel%
0
powershell c:\wtf.ps1
You cannot call a method on a null-valued expression.
At C:\wtf.ps1:3 char:12
+ $null.split <<<< ()
+ CategoryInfo : InvalidOperation: (split:String) [], ParentConta
insErrorRecordException
+ FullyQualifiedErrorId : InvokeMethodOnNull
echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
(我已经尝试了前两页的每个想法:https://www.google.co.uk/search?q …
如果.net程序在终止之前未能明确设置退出代码(通过调用Environment.Exit()/ Appliation.Current.Shutdown()/ ...),那么该进程的退出代码是什么?
正常终止是否总是导致退出代码为零,以及其他可能的情况是什么?
根据Hans Passant 从相关问题获得ExitCode From Exception Handler的回答:" 如果程序在异常上死亡,则其退出代码通常与底层异常错误代码相同 ".
因此,一个unaugth异常可以输出退出代码.这是总的情况,并始终保证是底层的异常错误代码异于零,并在特定的范围内?
是否有其他情况,.net框架或Windows可以自动设置另一个退出代码,例如一些非异常相关的崩溃(可能吗?),还是强制任务终止?
换句话说,我可以通过退出代码确定程序是否以任何异常方式终止?
或者如果在某些异常情况下也可能出现零退出代码,我是否可以Environment.Exit(somevalue)在程序的所有正常终止路径中包含a,并确保在崩溃的情况下永远不会出现此退出代码?
动机:
由于并非所有的exeptions都可以在没有严重变通方法的情况下被捕获,并且由于除了未被捕获的激活之外可能还有其他原因导致程序突然终止,因此确保所有代码路径都调用Environment.Exit()是不可能的.这就是为什么我有兴趣确定是否可以使用退出代码可靠地判断程序是否正常退出.
Invoke-Expression 将返回被调用的命令的所有文本.
但是,如何获得系统返回值是否已成功执行此命令或失败?在CMD中,我可以%errorlevel%用来获取外部命令执行状态.PowerShell怎么样?
当容器退出时,docker ps -a显示其退出代码(滚动
$ docker run ubuntu bash -c "exit 1"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2c769c4b9ef ubuntu "bash -c 'exit 1'" 6 seconds ago Exited (1) 3 seconds ago happy_fermat
Run Code Online (Sandbox Code Playgroud)
如何以编程方式获取数字退出代码,而不会出现容易出错grep和cut-ing?
如何wget从子shell进程获取退出代码?
所以,主要问题是$?等于0.哪里可以$?=8建立?
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "$?"
0
Run Code Online (Sandbox Code Playgroud)
tee实际上它没有用.
$> OUT=$( wget -q "http://budueba.com/net" ); echo "$?"
8
Run Code Online (Sandbox Code Playgroud)
但是${PIPESTATUS}数组(我不确定它与那种情况有关)也不包含该值.
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[1]}"
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[0]}"
0
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[-1]}"
0
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是 - 如何wget通过tee子shell …
我正在编写批处理(.bat)脚本,我需要处理删除文件夹失败的情况.我正在使用%errorlevel%捕获退出代码,但在rd命令的情况下它似乎不起作用:
C:\Users\edo\Desktop>rd testdir
Directory is not empty
C:\Users\edo\Desktop>echo %errorlevel%
0
Run Code Online (Sandbox Code Playgroud)
为什么?你有什么建议?
C中退出代码11的一般含义是什么?我环顾四周,无法找到明确的答案,所以我想我会在这里问.当我尝试向向量添加元素时.
我想知道bash脚本中的任何命令是否以非零状态退出.
我想要类似于set -e功能的东西,除了当命令以非零状态退出时我不希望它退出.我想让它运行整个脚本,然后我想知道:
a)所有命令以退出状态0退出
-
或- b)一个或多个命令以非零状态退出
例如,给出以下内容:
#!/bin/bash
command1 # exits with status 1
command2 # exits with status 0
command3 # exits with status 0
Run Code Online (Sandbox Code Playgroud)
我想要运行所有三个命令.运行脚本后,我想要一个指示,即至少有一个命令以非零状态退出.
C 2018 5.1.2.3 6说:
符合实施的最低要求是:
根据抽象机器的规则严格评估对易失性对象的访问.
在程序终止时,写入文件的所有数据应与根据抽象语义执行程序的结果相同.
交互设备的输入和输出动态应按照7.21.3的规定进行.这些要求的目的是尽快出现无缓冲或行缓冲输出,以确保在程序等待输入之前实际出现提示消息.
这是该程序的可观察行为.
从表面上看,这不包括程序的退出状态.
关于exit(status),7.22.4.4 5说:
最后,控制权返回给主机环境.如果值
status为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式.如果值status是EXIT_FAILURE,地位的实现定义的形式成功终止返回.否则返回的状态是实现定义的.
标准没有告诉我们这是可观察行为的一部分.当然,这种exit行为纯粹是C的抽象机器的描述是没有意义的; 除非在环境中可观察到,否则向环境返回值没有意义.所以我的问题不在于退出状态是否可观察到这是否是C标准对可观察行为的定义中的缺陷.或者标准中的其他地方是否有适用的文字?
我打算在我的一个shell脚本中使用C#可执行文件的返回码.我有两个选择:
从main方法返回一个int值
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
(要么)
使用带退出代码的Environment.Exit
class MainReturnValTest
{
static void Main()
{
//...
Enviroment.Exit(exitCode);
}
}
Run Code Online (Sandbox Code Playgroud)
使用上述任何方法从可执行文件返回值是否可以?或者其中一个比其他人更受欢迎?