Как предотвратить приостановку сценария zsh (вывод tty)

У меня есть zsh-скрипт, который я хочу запустить, чтобы он также загружал мой файл .zshrc. Я считаю, что мне нужно запустить свой скрипт в интерактивном режиме?

Таким образом, мой сценарий начинается так:

#!/bin/zsh -i

if [ $# = 0 ]
then
    echo "need command line paramter..."
    exit
fi

Однако, когда я пытаюсь запустить этот скрипт в фоновом режиме, мой скрипт приостанавливается (даже если я передаю правильное количество параметров):

[1]  + suspended (tty output) 

Мой вопрос: как я могу создать сценарий, который может работать в фоновом режиме, который также загружает мой файл запуска .zshrc? Если мне нужно перевести его в интерактивный режим, как я могу избежать приостановки при выходе tty?

Спасибо


person Peter991    schedule 21.06.2011    source источник
comment
Пожалуйста, включите полную команду, которую вы использовали для запуска скрипта.   -  person Flimzy    schedule 22.06.2011


Ответы (1)


Не используйте интерактивный режим для развлечения!

Вместо этого добавьте файл zshrc в сценарий, если хотите:

#!/bin/zsh
source ~/.zshrc
...

Для справки в будущем вы можете использовать кнопку disown, чтобы отсоединить ранее запущенное в фоновом режиме задание от оболочки, чтобы его нельзя было приостановить или что-то еще. Затем родительскую оболочку можно закрыть, не влияя на процесс:

$ disown %1

Вы можете сделать это непосредственно из командной строки при запуске программы, используя оператор &! вместо простого &:

$ ./my_command &!
person Caleb    schedule 21.06.2011
comment
Хм, &! работал в моем случае, но я хотел, чтобы фоновый скрипт также сообщал о чем-то, когда это было сделано. Любая идея о том, как это сделать? - person Xerus; 21.09.2018
comment
Почему это не работает внутри псевдонима? - person DimiDak; 07.05.2021
comment
@DimiDak Одна из вероятных причин заключается в том, что вы используете Bash, а не ZSH. Второе предложение — использовать функцию, а не псевдоним, если вы хотите повторно использовать что-то подобное, поместив его в свой профиль. - person Caleb; 07.05.2021
comment
@Caleb Я использую zsh. Я перенес все свои псевдонимы из моего .bashrc. Я не хочу преобразовывать их в функции. Поэтому мне было интересно, почему это не работает как псевдоним. Я заметил одну вещь: это работает, когда я использую sudo перед использованием этого псевдонима. Я предполагаю, что это как-то связано с кэшированными учетными данными. Я забыл упомянуть, что мой псевдоним содержит sudo. - person DimiDak; 07.05.2021
comment
@DimiDak Это на тебе. Вы не можете отказаться от процесса и при этом ожидать, что он сможет подключиться к вашему терминалу, чтобы запросить у вас пароли. Это не ZSH и не этот синтаксис. Возможно, взломайте его, включив sudo -v; ... в начале вашего псевдонима, но он все равно будет ненадежным. - person Caleb; 07.05.2021