gpt4 book ai didi

linux - Windows shell 脚本中的 echo %ERRORLEVEL% 与 echo $?在 Linux 中 : are there any differences in behavior?

转载 作者:可可西里 更新时间:2023-11-01 10:06:10 31 4
gpt4 key购买 nike

如果我在 Windows 中这样做:

C:\>dir z:
Drive path not found.

C:\>echo %ERRORLEVEL%
1

C:\>echo %ERRORLEVEL%
1

C:\>echo %ERRORLEVEL%
1

但如果我在 Linux 中这样做:

Luis@Kenobi ~/Temporal/SUDO/Pruebas
$ ls /ppp
ls: unable to access /ppp: No such file or directory

Luis@Kenobi ~/Temporal/SUDO/Pruebas
$ echo $?
2

Luis@Kenobi ~/Temporal/SUDO/Pruebas
$ echo $?
0

Luis@Kenobi ~/Temporal/SUDO/Pruebas
$ echo $?
0

这是应该发生的,因为 Windows 中的 echo 不会修改与上一个命令的错误级别关联的变量。
这对我来说是出乎意料的,我花了一段时间来调试脚本,因为我认为主要行为会是相同的

只要我经常在 Windows 或 Linux shell 上编写一些脚本,是否还有任何其他关键差异需要注意的主要错误级别操作系统变量管理?

最佳答案

适用于 Windows

%ERRORLEVEL% 在任何命令失败的情况下将为 1,在成功执行命令后将更改为 0,echo

除外

In windows echo is a curious command. Let's see how it behaves

当回显命令起作用时

If errorlevel is 0 before echo, after echo, errorlevel will be 0 (the obvious case)

If errorlevel is 1 before echo, after echo, errorlevel will be 1. Echo does not change errorlevel

当 echo 命令“失败”时

echo 会失败吗?让我们创建一个它“失败”的案例。在同一目录下打开两个命令窗口。在第一个中,运行 pause > file.txt 生成一个文件并在 pause 命令等待按键时锁定它。在第二个命令窗口中运行 echo something > file.txt。在这种情况下,echo 命令将失败,因为第一个命令窗口锁定了文件,所以第二个命令窗口无法写入文件。正确的说 echo 并没有失败,但是重定向失败了,只是看看会发生什么

If errorlevel is 1 before running echo, it is still 1 after the echo (the obvious case)

If errolevel is 0 before running echo, it is still 0 after the echo

因此,似乎 echo 命令在这两种情况下的行为相同

但是如果我们将 echo 的执行方式更改为

echo something && echo works || echo fails

然后行为发生了一点变化

当回显命令起作用时

没有区别。 errorlevel 不会改变,保持它在运行 echo 命令之前的值。

当回显命令“失败”时

使用 echo something > file && echo works || echo 失败 然后,如果在运行 echo 之前 errorlevel 为 1,它将保留其值。

But if errorlevel is 0 and the echo command fails, in this case, with this construct of the command, errorlevel will show the failure and change its value to 1

适用于 Linux

每一个不成功的命令输出$? value 将设置为非零,并且每次成功输出命令时,它将设置为 zero

关于linux - Windows shell 脚本中的 echo %ERRORLEVEL% 与 echo $?在 Linux 中 : are there any differences in behavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848912/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com