为什么以下工作不工作?

$ 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二进制文件提供完整的道路,那就给我麻烦了)

有帮助吗?

解决方案

因为外壳不会将别名传递给子过程(除非您使用$()或````)。

$别名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'

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

每个简单命令的第一个单词(如果未引用)将被检查以查看其是否具有别名。

不幸的是,似乎没有 bash 有类似的东西 zsh' 全球别名, ,这些位置扩展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top