2013-03-30 66 views
1

最近我切換到zsh以供日常使用。我遇到的一個問題是我如何自動啓動一些後臺命令行可執行文件(例如,fetchmail -d 1800)。當我添加行成~/.zprofile~/.zshrc,一切,直到我打開另一個zsh的流程實例(其實,我使用tmux所以經常發生)去罰款,fetchmail的抱怨如何在使用zsh時自動啓動作業

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

我認爲~/.zprofile可能只被執行一次,但似乎我錯了。那我該如何正確處理呢?

謝謝。

回答

1

編輯:比原來的想法好(從下面的評論):

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窗口管理器在啓動時總是會讀*。仍然需要檢查,因爲當有人註銷並重新登錄時,'〜/ .profile'會再次發生(儘管錯誤消息通常會被重定向到標準輸出以外的〜/ .xsession-errors)。 –

2

爲什麼你需要在zsh配置文件中啓動它?所有或幾乎所有的窗口管理器和桌面環境都支持在啓動時運行命令。例如,使用fluxbox時,您可以將此啓動線添加到$HOME/.fluxbox/startup

注意:每次有人啓動登錄shell時都會讀取.zprofile。每次有人啓動交互式shell時都會讀取.zshrc。每次有人啓動一個shell(不管是哪一個)時,都會讀取.zshenv。 (除非通過命令行參數顯式關閉。)實際上沒有配置文件只能讀取一次。

+0

其實我知道有一個替代方案,我可以在X Window Manager中配置它,但這不是一個通用的解決方案。令人驚訝的是,當我在.zprofile中編寫'export PATH = $ PATH:/ my/extra/path'時,當我啓動一個新的zsh實例時,'PATH中不再添加'/ my/extra/path' ';但在.zshrc中寫入,自定義路徑總是附加到PATH變量。我不知道爲什麼。 –

+1

@HongxuChen默認情況下,一些終端仿真器總是啓動登錄shell。其他不啓動登錄shell,除非從命令行配置/請求。因此'.zshrc'是修改路徑的最佳位置,它總是在shell交互時使用。儘管爲了使'$ PATH'更清潔,我總是添加一些條件,首先檢查所需路徑是否已經存在於'$ PATH'中,然後才添加它。 – ZyX

相關問題