所以我陷入了这个经典陷阱。在尝试自学一些基本的bash脚本时,我决定我想这样做:
alias emacs=emacsFunction
emacsFunction() {
if [ "$#" -eq 1 ]; then
emacs $1 &
fi
emacs
}
目标非常简单。当我在终端中键入emacs时,如果我提供了一个参数(例如emacs .bashrc),我希望它在emacs中打开我的.bashrc文件,并且仍允许我在终端窗口中输入命令(将'&'添加到一个命令允许这个。)。
我愿意接受任何建议。我确信有一种比我这里的代码更有效(更智能)的方法。
提前致谢!
答案 0 :(得分:4)
避免功能/别名/等。是command
内置的内容(参见Bash Builtin Commands)。因此,当您想要避免使用函数或别名时,请使用command emacs
。
据说你不需要函数和这里的别名。您的功能可以称为emacs。
你也不需要明确地测试参数,除非你只是希望它在传递参数时转到后台(否则不要)。 (我假设在后台的情况下会生成一个X窗口?)
如果您确实需要仅用于参数的背景版本,那么您需要这样:
emacs() {
if [ $# -eq 0 ]; then
command emacs
else
command emacs "$@" &
fi
}
假设您不需要仅供参考的业务,那么您可以使用:
emacs() {
command emacs "$@" &
}
如果您不想要仅用于参数的背景行为,那么就说这不是真的有任何不同,那么只需要始终运行emacs &
或emacs <files> &
只保存最后输入&
。
答案 1 :(得分:1)
切换到if..else
会有所帮助:
alias emacs=emacsFunction
function emacsFunction () {
if [ "$#" -eq 1 ]; then
emacs $1 &
else
emacs
fi
}