Bel*_*val 47 linux command-line
是否有一个标准的虚拟可执行文件在 Linux 中什么都不做?我有一个 shell 命令,它总是在构建过程之前打开 $EDITOR 以手动输入参数。就我而言,我的参数始终已设置(这是一个自动脚本),因此我从不需要它,但它仍然会弹出并等待用户输入。
为了解决这个问题,我创建了一个空的可执行文件,它什么都不做,所以我可以设置EDITOR=dummy和构建脚本调用它,它退出并且构建过程可以开始。
我的问题是,Linux 中是否有一个现有的官方文件,在执行时什么都不做,一种我可以用于此目的的占位符?
ilk*_*chu 121
有标准的实用程序true和false. 第一个只返回退出状态 0 以表示成功执行,第二个只返回一个非零值,指示不成功的结果(*)。你可能想要第一个。
尽管一些真正希望您输入一些文本(提交消息等)的系统会检查“编辑过的”文件是否确实被修改过,true但在这种情况下只是运行不会飞。相反,touch可能会起作用;它更新它作为参数获取的任何文件的时间戳。
但是,如果编辑器获得除文件名之外的任何其他参数,touch则会将它们创建为文件。许多编辑器支持一个参数,比如告诉初始行将光标放入,因此编辑器可能被称为。(例如,这样做,似乎没有。)+NNN$EDITOR +123 filename.txtlessgit
请注意,您将要使用true,而不是例如/bin/true。首先,如果涉及到 shell,指定不带路径的命令将允许 shell 使用内置实现,如果不使用 shell,则PATH无论如何都会找到二进制文件。其次,并非所有系统都有/bin/true;例如在 macOS 上,它是/usr/bin/true. (感谢@jpaugh。)
(* 或者正如GNU 手册页所说的那样,错误的“[做] 什么也不成功”。谢谢@8bittree。)
ger*_*rit 27
在 shell 中,您可以使用内置的:. 它不是可执行文件,但在 shell 脚本或从 shell 脚本执行的任何内容中,它会执行以下操作:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Run Code Online (Sandbox Code Playgroud)
这可能因在 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
Run Code Online (Sandbox Code Playgroud)