Использование псевдонимов с nohup - PullRequest
10 голосов
/ 16 февраля 2012

Почему не работает следующее?

$ 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)

Ответы [ 4 ]

9 голосов
/ 16 февраля 2012

Поскольку оболочка не передает псевдонимы дочерним процессам (кроме случаев, когда вы используете $ () или ``).

$ alias sayHello = '/ bin / echo "Hello world!"'

Теперь в этом процессе оболочки известен псевдоним, что нормально, но работает только в этом одном процессе оболочки.

$ sayHello 

Hello world!

Поскольку вы сказали "sayHello" в той же оболочке, она работала.

$ nohup sayHello

Здесь программа nohup запускается как дочерний процесс.Следовательно, он не будет получать псевдонимы.Затем он запускает дочерний процесс "sayHello" - который не найден.

Для вашей конкретной задачи лучше всего сделать так, чтобы новые "perl" и "python" выглядели как можно более нормальными.Я бы предложил установить путь поиска.

В вашем ~ / .bash_profile добавьте: export PATH = "/ my / блестящий / interpreters / bin: $ {PATH}"

Затем выполните повторный запуск.

Поскольку это переменная среды, она будет передаваться всем дочерним процессам, независимо от того, являются ли они оболочками или нет - теперь она должна работать очень часто.

3 голосов
/ 02 ноября 2015

Для bash: попробуйте выполнить nohup 'your_alias'. Меня устраивает. Я не знаю, почему обратная цитата не отображается. Поместите свой псевдоним в кавычки.

1 голос
/ 24 сентября 2017

С помощью bash вы можете вызывать подоболочку в интерактивном режиме, используя опцию -i.Это будет источником вашего .bashrc, а также включит параметр оболочки expand_aliases.Конечно, это будет работать, только если ваш псевдоним определен в вашем .bashrc, который является соглашением.

Страница управления Bash:

Если присутствует опция -i, оболочка является интерактивной .

expand_aliases : если установлено, псевдонимы раскрываются, как описано выше в разделе Псевдонимы.Эта опция включена по умолчанию для интерактивных оболочек.

Когда запускается интерактивная оболочка, которая не является оболочкой входа, bash читает и выполняет команды из /etc/bash.bashrc и ~/.bashrc, еслиэти файлы существуют.


$ nohup bash -ci 'sayHello'
0 голосов
/ 16 февраля 2012

Если вы посмотрите на раздел Псевдонимы в руководстве по Bash, он говорит:

Первое слово каждой простой команды, если оно не заключено в кавычки, проверяется на наличиепсевдоним.

К сожалению, похоже, что bash не имеет ничего общего с zsh глобальными псевдонимами , которые раскрываются в любой позиции.

...