2013-03-30 1 views
1

Я переключился на zsh для моего ежедневного использования в последнее время. Одна из проблем, с которыми я сталкиваюсь, заключается в том, что я могу автозапускать исполняемый файл фоновой командной строки (например, fetchmail -d 1800). Когда я добавить строку в ~/.zprofile или ~/.zshrc, все идет хорошо, пока я открыть еще один экземпляр процесса ЗШ (на самом деле, я использую tmux так часто случается), Fetchmail жалуется, чтоКак автозапуск заданий при использовании zsh

fetchmail: can't accept options while a background fetchmail is running. 

Я думал, что ~/.zprofile может только выполняться один раз, но кажется, что я ошибался. Итак, как я могу справиться с этим должным образом?

Спасибо.

ответ

1

Edit: лучше, чем оригинальная идея (от комментариев ниже):

ps -C fetchmail >/dev/null || fetchmail -d 1800 

Исправлена ​​оригинальная идея:

Как насчет проверки, есть ли процесс в фоновом режиме уже работает и бег fetchmail только если нет:

[ -z `ps aux | grep "fetchmail" | grep -v "grep"` ] && fetchmail -d 1800 
+1

Существует 'ps -C fetchmail', не используйте' grep'. Также обратите внимание, что у вас неправильная позиция аргумента '-z' (но с' ps -C' вам не нужно '[-z' вообще:' ps -C fetchmail>/dev/null || fetchmail -d 1800 '). – ZyX

+0

@ ZyX Хорошо, спасибо! – plesiv

+0

Он работает! Кстати, я полагаю, что эту строку лучше вставить в '~/.profile', так как X window manager всегда будет читать ее * один раз * во время запуска. По-прежнему необходимо проверить, что, когда кто-то выходит из системы и переписывается, файл '~/.profile' получает еще один (хотя обычно сообщение об ошибке будет перенаправлено на' ~/.xsession-errors', кроме stdout). –

2

Зачем вам нужно запустить его в файле конфигурации zsh? Все или почти все оконные менеджеры и настольные среды поддерживают запуск команд при запуске. Например, при использовании fluxbox вы можете просто добавить эту стартовую строку в $HOME/.fluxbox/startup.

Примечание: .zprofile читается каждый раз, когда кто-то запускает оболочку входа. .zshrc читается каждый раз, когда кто-то запускает интерактивную оболочку. .zshenv читается каждый раз, когда кто-то запускает оболочку (независимо от того, какой). (Если явно не отключены аргументы командной строки.) На самом деле нет файла конфигурации, который читается только один раз.

+0

На самом деле я знаю, что есть альтернатива, которую я могу настроить в X Window Manager, но это не общее решение. Я удивляюсь, что когда я пишу 'export PATH = $ PATH:/my/extra/path' в .zprofile, когда я запускаю новый экземпляр zsh, больше не добавляется'/my/extra/path' в 'PATH '; но написанный в .zshrc, сам настраиваемый путь всегда добавляется к переменной PATH. Я не знаю почему. –

+1

@HongxuChen Известно, что некоторые эмуляторы терминала всегда запускают оболочку для входа по умолчанию. Другие не запускают оболочки входа, если они не заданы/запрошены из командной строки. Таким образом, '.zshrc' - лучшее место для изменения пути, оно всегда используется, когда оболочка является интерактивной. Хотя для уборщика '$ PATH' я всегда добавляю некоторое условие, которое сначала проверяет, что необходимый путь еще не находится в' $ PATH', а только затем добавляет его. – ZyX

 Смежные вопросы

  • Нет связанных вопросов^_^