是否有一个标准的虚拟可执行文件在 Linux 中不执行任何操作?我有一个 shell 命令,它总是在构建过程之前打开 $EDITOR 以手动输入参数。就我而言,我的参数始终已设置(这是一个自动脚本),因此我从不需要它,但它仍然会弹出并等待用户输入。
为了解决这个问题,我创建了一个不执行任何操作的空可执行文件,因此我可以设置EDITOR=dummy
并且构建脚本调用它,它退出并且构建过程可以启动。
我的问题是,Linux 中是否有一个现有的官方文件,在执行时什么也不做,是一种我可以用于此目的的占位符?
答案1
有标准实用程序true
和false
.第一个什么也不做,只是返回退出状态 0 表示成功执行,第二个不执行任何操作,只是返回一个非零值,表示结果不成功(*)。你可能想要第一个。
尽管某些确实希望您输入一些文本(提交消息等)的系统会检查“编辑的”文件是否确实被修改,但true
在这种情况下仅仅运行是行不通的。相反,touch
可能会起作用;它更新作为参数获取的任何文件的时间戳。
但是,如果编辑器获取文件名以外的任何其他参数,touch
则会将它们创建为文件。许多编辑器支持一个参数,比如告诉第一行将光标放入,因此编辑器可以被称为. (例如,这样做,似乎没有。)+NNN
$EDITOR +123 filename.txt
less
git
请注意,您需要使用true
,而不是例如/bin/true
。首先,如果涉及 shell,则指定不带路径的命令将允许 shell 使用内置实现,如果不使用 shell,则无论如何都会找到二进制文件PATH
。其次,并非所有系统都有/bin/true
;例如,在 macOS 上,它是/usr/bin/true
. (谢谢@jpaugh。)
(* 或作为GNU 手册页指出, false “[不执行]任何操作,不成功”。谢谢@8bittree。)
答案2
在 shell 中,您可以使用内置的:
.它不是可执行文件,但在 shell 脚本或从 shell 脚本执行的任何内容中,它会执行以下操作:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
这可能最著名的是在 while 语句 ( while :; do break; done
) 中使用,但不限于这种使用。如果您需要多次执行此操作,则不启动单独的进程会更快:
$ time for i in $(seq 1000); do :; done
real 0m0,007s
user 0m0,002s
sys 0m0,004s
$ time for i in $(seq 1000); do /bin/true; done
real 0m0,686s
user 0m0,462s
sys 0m0,217s
答案3
@ilkkachu 使用该true
命令的建议可能是最好的答案,但您也可以使用该命令
sleep 0
答案4
/bin/true
true
没有成功执行任何操作。
false
尝试什么也不做,但失败了。
/bin/true
它们在和中实现/bin/false
。
但因为有时快速什么都不做也很好,所以还有一个内置的 shell true
。有时您希望快速地什么都不做而失败,因此有一个内置的 shell false
。
成功和失败的区别在于退出状态$?
。这是0
为了成功,而不是为了失败。退出状态1
用于简单地指示失败,但它可以是错误代码,可以254
详细解释出现的问题。
$ true
$ echo $?
0
$ false
$ echo $?
1
$ false
$ echo $?
1
$ echo $?
0
请注意最后一个如何echo
返回0
,因为echo
前面的它成功了。
退出状态与逻辑运算符一起使用,例如“and”( &&
) 和“or”( ||
):
$ true && echo "success"
success
$ false && echo "failure"
$ true || echo "success"
$ false || echo "failure"
failure
请注意 afterfalse && echo "failure"
和true || echo "success"
没有打印任何内容。