在计算机启动时将命令放在哪里运行 - 使用zsh

时间:2014-02-03 21:54:17

标签: zsh

我在Google中找不到它。

我尝试~/.profile,但似乎每个标签都在运行。

我在哪里可以找到地图:file ---> when runs

更新

我在Ubuntu,我把它放在/etc/rc.local但命令没有被执行:

my_command
exit 0

2 个答案:

答案 0 :(得分:0)

man zshall中描述了每个文件运行时间的映射,搜索STARTUP/SHUTDOWN FILES

[...]

正如其他人所指出的那样,你需要通过运行一次来更清楚地表达你的意思。每次开机一次?每次桌面登录一次?

每个登录shell ~/.profile,但您始终可以启动更多登录shell。

如果你有一个shell代码块,你真的只想执行一次,你应该进行合理的检查,看看你是否已经运行它,如:

  • 使用常用锁来避免比赛,然后在/tmp上创建一个文件,比如/ran/withsuccess,然后chmod -w。它将在重新启动时被删除(假设您的操作系统执行此操作...)
  • (如果可以接受)您还可以更改启动桌面会话的代码,但如果您执行了2次图形登录,则会运行两次
  • 以下代码gpg-agent

为了避免两次启动gpg-agent,我检查env变量,然后看看我是否可以连接:

# Effectively checks if GPG_ENV is set and if it is set to an existing file 
if [ -f "${GPG_ENV}" ]; then
   # assumes gpg-agent is set... try to connect
   gpg-connect-agent 'getinfo socket_name' /bye &> /dev/null
   if [[ $? -eq 1 ]]; then
    start_agent
   fi
else
   # runs the gpg-agent start-up which I do not want to run twice
   start_agent
 fi

答案 1 :(得分:0)

是Mac吗?使用launchd ..

创建一个类似于......的plist

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.mycompany.startupscript</string> <key>LaunchOnlyOnce</key> <true/> <key>Program</key> <string>/usr/local/bin/startupscript</string> <key>RunAtLoad</key> <true/> </dict> </plist>

将其加入/Library/LaunchDaemons,并拥有-rw-r--r-- root wheel个正确的权限&#39; ...您也可以实现启动脚本必杀技