与nohup使用别名

为什么以下工作?

$ alias sayHello='/bin/echo "Hello world!"' $ sayHello Hello world! $ nohup sayHello nohup: appending output to `nohup.out' nohup: cannot run command `sayHello': No such file or directory 

(我问这个问题的原因是因为我已经将我的perlpython别名为不同的perl / python二进制文件,这些二进制文件是为我自己的目的而优化的;但是,如果我不提供perl / python的完整path,nohup会给我带来麻烦二进制文件)

因为shell不会将别名传递给子进程(除非使用$()或“)。

$ alias sayHello ='/ bin / echo“Hello world!”'

现在在这个shell进程中已经有一个别名了,这很好,但是只能在这个shell进程中运行。

 $ sayHello Hello world! 

既然你说了“sayHello”在它的工作。

 $ nohup sayHello 

这里,一个程序“nohup”正在作为一个子进程启动。 因此,它不会收到别名。 然后开始子过程“sayHello” – 这是没有找到。

对于您的具体问题,最好尽可能使新的“perl”和“python”看起来像正常的那样。 我建议设置搜索路径。

在〜/ .bash_profile中添加:export PATH =“/ my / shiny / interpreters / bin:$ {PATH}”

然后再登录。

由于这是一个环境变量,它将被传递给所有的子进程,不管是否是shell,它现在应该经常工作。

对于bash:尝试做your_alias '。 这个对我有用。 我不知道为什么没有显示回报。 把你的别名放在引号内。

使用bash,可以使用-i选项以交互方式调用子shell。 这将源自你的.bashrc以及启用expand_aliases外壳选项。 当然,这只有在你的.bashrc中定义你的别名的时候才会起作用。

Bash manpage:

如果存在-i选项,则该shell是交互式的

expand_aliases :如果设置,别名按照上面的ALIASES中的描述进行扩展。 交互式shell 默认启用此选项。

当一个不是登录shell的交互式shell被启动时,如果这些文件存在,bash将从/etc/bash.bashrc~/.bashrc读取和执行命令。


 $ nohup bash -ci 'sayHello' 

如果你看看Bash手册的别名部分,它说

每个简单命令的第一个单词,如果没有引用,就会被检查以查看它是否有别名。

不幸的是, bash似乎没有任何像zsh的全局别名一样的扩展名。