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'