Вопрос

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

$ 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 есть что -то вроде zshS. Глобальные псевдонимы, которые расширяются в любой позиции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top