Использование псевдонимов с 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
к различным двоичным файлам Perl/Python, которые были оптимизированы для моих собственных целей; Тем не менее, Nohup дает мне проблемы, если я не предоставляю полный путь к своим двоичным двойным Perl/Python)
Решение
Потому что оболочка не передает псевдонимы в детские процессы (за исключением случаев, когда вы используете $ () или ``).
$ alias sayhello = '/bin/echo "Привет, мир!"
Теперь псевдоним известен в этом процессе оболочки, который в порядке, но работает только в этом процессе оболочки.
$ sayHello
Hello world!
Поскольку вы сказали «Sayhello» в той же оболочке, это работало.
$ nohup sayHello
Здесь программа «nohup» начинается как детский процесс. Следовательно, он не будет получать псевдонимы. Затем он запускает дочерний процесс "Sayhello" - который не найден.
Для вашей конкретной проблемы лучше, чтобы новые «Perl» и «Python» были как можно более нормальными. Я бы посоветовал установить путь поиска.
В вашем ~/.bash_profile add: export path = "/my/shiny/stropters/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, говорится
Первое слово каждой простой команды, если она не подвержена котированию, проверяется, чтобы увидеть, есть ли у нее псевдоним.
К сожалению, это не похоже на bash
есть что -то вроде zsh
S. Глобальные псевдонимы, которые расширяются в любой позиции.