题
为什么以下工作不工作?
$ 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
(我问这个问题的原因是因为我使我的 perl
和 python
出于我自己的目的而优化的不同perl/python二进制文件;但是,如果我不为我的perl/python二进制文件提供完整的道路,那就给我麻烦了)
解决方案
因为外壳不会将别名传递给子过程(除非您使用$()或````)。
$别名sayhello ='/bin/echo“你好世界!”'
现在,在此外壳过程中已知一个别名,这很好,但仅在此外壳过程中起作用。
$ sayHello
Hello world!
既然您在同一外壳中说了“ Sayhello”。
$ nohup sayHello
在这里,一个程序“ NOHUP”正在作为儿童过程启动。因此,它不会收到别名。然后它启动了孩子的过程“ sayhello” - 找不到。
对于您的特定问题,最好使新的“ perl”和“ python”看起来尽可能地像普通问题。我建议设置搜索路径。
在您的〜/.bash_profile add:export path =“/my/my/shiny/finterers/bin:$ {path}”
然后重胶。
由于这是一个环境变量,因此 将要 无论是否贝壳,都可以传递给所有子过程 - 现在应该经常使用。
其他提示
bash:尝试做nohup'your_alias
'。这个对我有用。我不知道为什么没有显示背部报价。将您的别名放在背报价中。
使用Bash,您可以使用 -i
选项。这将把您的 .bashrc
以及启用 expand_aliases
外壳选项。当然,这只有在您的 别名 在您的 .bashrc
这是约定。
bash manpage:
如果是
-i
有选项,外壳是 交互的.Expand_aliases: :如果设置,则如上所述在别名下扩展。此选项是 默认启用 用于交互式壳。
当启动非登录外壳的交互式外壳时,Bash读取并执行命令
/etc/bash.bashrc
和~/.bashrc
, ,如果存在这些文件。
$ nohup bash -ci 'sayHello'