使用带有nohup的别名

asf*_*107 10 unix bash alias 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
Run Code Online (Sandbox Code Playgroud)

(我问这个问题的原因是因为我把我perlpython不同的perl/python二进制混淆了,这些二进制文件是为了我自己的目的而优化的;但是,如果我不提供perl/python二进制文件的完整路径,nohup会给我带来麻烦)

Dan*_*vic 9

因为shell没有将别名传递给子进程(除非你使用$()或``).

$别名sayHello ='/ bin/echo"Hello world!"'

现在在这个shell进程中已知一个别名,这很好,但只适用于这个shell进程.

$ sayHello 

Hello world!
Run Code Online (Sandbox Code Playgroud)

既然你在同一个shell中说"sayHello"就行了.

$ nohup sayHello
Run Code Online (Sandbox Code Playgroud)

这里,程序"nohup"正在作为子进程启动.因此,它不会收到别名.然后它启动子进程"sayHello" - 找不到.

对于您的具体问题,最好尽可能使新的"perl"和"python"看起来像普通的那样.我建议设置搜索路径.

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

然后重新登录.

由于这是一个环境变量,它被传递到所有的子进程,无论是弹还是没有-它现在应该很经常工作.


小智 5

对于 bash:尝试执行 nohup ' your_alias'。这个对我有用。我不知道为什么没有显示反引号。将您的别名放在反引号内。


Tra*_*rke 5

使用 bash,您可以使用该-i选项以交互方式调用子 shell。这将获取您的资源.bashrc并启用expand_aliasesshell 选项。当然,只有当您的别名.bashrc在您的约定中定义时,这才有效。

Bash 手册页:

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

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

当启动非登录 shell 的交互式 shell 时,bash 会读取并执行来自/etc/bash.bashrc和 的命令~/.bashrc(如果这些文件存在)。


$ nohup bash -ci 'sayHello'
Run Code Online (Sandbox Code Playgroud)