2013-03-30 34 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

相关问题