停止Bash脚本中的无限递归

mik*_*477 4 bash

所以我陷入了这个经典陷阱。在尝试向自己介绍一些基本的bash脚本时,我决定要这样做:

alias emacs=emacsFunction

emacsFunction() {
    if [ "$#" -eq 1 ]; then
        emacs $1 &
    fi
    emacs 
}
Run Code Online (Sandbox Code Playgroud)

目标很简单。当我在终端中键入emacs时,如果我提供了一个参数(例如emacs .bashrc),我希望它在emacs中打开我的.bashrc文件,并且仍然允许我在终端窗口中输入命令(在命令中添加'&'允许)。

我愿意接受任何建议。我敢肯定,有一种比我在这里的代码更有效(更智能)的方法。

提前致谢!

Eta*_*ner 5

避免使用函数/别名/等。是什么command内置的是(见的Bash内建命令)。因此,command emacs当您要避免使用函数或别名时,请使用。

话虽如此,您在这里不需要功能别名。您的函数只能称为emacs。

您也不需要显式测试参数,除非您只希望在传递参数时将其转到后台(否则就不需要)。(我假设在背景情况下会生成X窗口?)

如果您确实希望背景仅用于参数版本,那么您需要这样做:

emacs() {
    if [ $# -eq 0 ]; then
        command emacs
    else
        command emacs "$@" &
    fi
}
Run Code Online (Sandbox Code Playgroud)

假设您不需要参数仅背景业务,那么您可以使用:

emacs() {
    command emacs "$@" &
}
Run Code Online (Sandbox Code Playgroud)

话虽这么说,如果您不希望仅背景换参数的行为,那么这实际上并没有什么不同,只是始终运行,emacs &或者emacs <files> &因为您只保存最后键入的内容&