为什么以下工作?
$ 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的完整path,nohup会给我带来麻烦二进制文件)
因为shell不会将别名传递给子进程(除非使用$()或“)。
$ alias sayHello ='/ bin / echo“Hello world!”'
现在在这个shell进程中已经有一个别名了,这很好,但是只能在这个shell进程中运行。
$ sayHello Hello world!
既然你说了“sayHello”在它的工作。
$ nohup sayHello
这里,一个程序“nohup”正在作为一个子进程启动。 因此,它不会收到别名。 然后开始子过程“sayHello” – 这是没有找到。
对于您的具体问题,最好尽可能使新的“perl”和“python”看起来像正常的那样。 我建议设置搜索路径。
在〜/ .bash_profile中添加:export PATH =“/ my / shiny / interpreters / bin:$ {PATH}”
然后再登录。
由于这是一个环境变量,它将被传递给所有的子进程,不管是否是shell,它现在应该经常工作。
对于bash:尝试做your_alias
'。 这个对我有用。 我不知道为什么没有显示回报。 把你的别名放在引号内。
使用bash,可以使用-i
选项以交互方式调用子shell。 这将源自你的.bashrc
以及启用expand_aliases
外壳选项。 当然,这只有在你的.bashrc
中定义你的别名的时候才会起作用。
Bash manpage:
如果存在
-i
选项,则该shell是交互式的 。expand_aliases :如果设置,别名按照上面的ALIASES中的描述进行扩展。 交互式shell 默认启用此选项。
当一个不是登录shell的交互式shell被启动时,如果这些文件存在,bash将从
/etc/bash.bashrc
和~/.bashrc
读取和执行命令。
$ nohup bash -ci 'sayHello'
如果你看看Bash手册的别名部分,它说
每个简单命令的第一个单词,如果没有引用,就会被检查以查看它是否有别名。
不幸的是, bash
似乎没有任何像zsh
的全局别名一样的扩展名。