Bash 将别名与nohup一起使用

Bash 将别名与nohup一起使用,bash,unix,alias,nohup,Bash,Unix,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 (我问这个问题的原因是因为我将我的perl和python化名为不同的p

为什么下面的方法不起作用

$ 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二进制文件的完整路径,nohup会给我带来麻烦)

,因为shell不会将化名传递给子进程(使用$()或``时除外)

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

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

$ sayHello 

Hello world!
既然你在同一个壳里说了“你好”,它就起作用了

$ nohup sayHello

在这里,程序“nohup”作为子进程启动。因此,它不会接收别名。 然后它启动子进程“sayHello”-未找到该进程

对于您的特定问题,最好使新的“perl”和“python”看起来尽可能像普通的。我建议设置搜索路径

~/.bash\u配置文件中添加

export PATH="/my/shiny/interpreters/bin:${PATH}"
然后重新登录

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

如果您查看Bash手册的一节,它说

检查每个简单命令的第一个单词(如果没有引号),以查看 如果它有别名


不幸的是,它不像
bash
有任何类似于
zsh的东西,可以在任何位置展开。

对于bash:尝试使用nohup'
your_alias
”。它对我有效。我不知道为什么不显示回引号。将别名放在回引号内。

对于bash,您可以使用t以交互方式调用子shell他使用了
-i
选项。这将为您的
.bashrc
提供源代码,并启用
扩展\u别名
shell选项。当然,这仅在
.bashrc
中定义了别名时才有效,这是惯例

Bash手册页:

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

展开\u别名:如果设置了别名,将按照上面“别名”下的说明展开别名。默认情况下,交互式Shell会启用此选项

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



试试
eval nohup sayHello
(如果它能工作,我会很惊讶)。祝你好运。把nohup命令放在别名中怎么样:
alias sayHello='nohup/bin/echo“Hello world”
“因此,它不会收到别名。”我在想,子进程,比如
(echo“TheAlias=$(别名sayHello;sayHello)“)&等待
失败,似乎别名未应用,但存在;我想知道是否有方法应用确实存在的别名?
$ nohup bash -ci 'sayHello'