我知道我曾经知道如何做到这一点,但是......如何在unix登录时运行脚本(bash还可以)?
答案 0 :(得分:110)
当Bash启动时,它会以各种不同的方式执行命令 脚本。
当Bash作为交互式调用时 登录shell,它首先读取和 从文件中执行命令 / etc / profile,如果该文件存在。 在阅读该文件后,它会查找 〜/ .bash_profile,〜/ .bash_login,和 〜/ .profile,按此顺序,并读取 并执行第一个命令 一个存在且可读的。
当登录shell退出时,Bash会读取 并从文件中执行命令 〜/ .bash_logout,如果它存在。
当交互式shell不是 一个登录shell启动,Bash读 并执行来自〜/ .bashrc的命令, 如果该文件存在。这可能是 使用--norc选项禁止。 --rcfile文件选项将强制执行 Bash从中读取和执行命令 文件而不是〜/ .bashrc。
答案 1 :(得分:27)
登录时,大多数shell都会执行登录脚本,您可以使用该脚本执行自定义脚本。 shell执行的登录脚本当然取决于shell:
你可以通过
找出你正在使用的shellecho $SHELL
来自提示。
对于稍微宽泛的“登录”定义,知道在启动X时大多数发行版都很有用,你的.xsessionrc将在你的X会话启动时执行。
答案 2 :(得分:9)
使用Bash时,将为交互式登录shell运行~/.bash_profile
,~/.bash_login
和~/.profile
中的第一个。我相信除了Bash之外,~/.profile
通常由Unix shell运行。 Bash将为非登录交互式shell运行~/.bashrc
。
我通常会将我想要的所有内容始终设置在.bashrc
中,然后从.bash_profile
运行它,我还设置了一些应该在我登录时运行的内容,例如设置ssh-agent
或正在运行screen
。
答案 3 :(得分:5)
如果您希望运行一个脚本而仅一个脚本,则可以将其设为用户默认shell。
echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd
* username:x:uid:grp:message:homedir:/usr/bin/uptime
可以有有趣的效果:)(它不安全,所以不要太信任它。没有什么比设置你的默认shell是擦除你的驱动器的脚本。...虽然,...我可以想象一个可能非常有用的场景)
答案 4 :(得分:3)
将其放在bash profile:
中~/.bash_profile
答案 5 :(得分:3)
如果您使用的是OSX,则为~/.profile
答案 6 :(得分:3)
Launchd
是OS X中的首选方式。
如果您希望它在您的登录信息上运行,请将其放入~/Library/LaunchAgents
启动launchd
项目
launchctl load /Library/LaunchDaemons/com.bob.plist
停止项目
launchctl unload /Library/LaunchDaemons/com.bob.plist
示例com.bob.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.bob</string>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>/Users/user/program.jar</string>
</array>
</dict>
</plist>
答案 7 :(得分:3)
我好几天都对这个问题感到沮丧。什么都没有在ubuntu上工作。如果我将调用放在/ etc / profile中,那么在登录尝试时它都会崩溃。我无法使用&#34;启动应用程序&#34;因为那不是我想要的。这只为当前用户设置脚本。
最后我找到了这篇小文章:http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html
解决方案是:
找出$ XDG_CONFIG_DIRS路径:
回显$ XDG_CONFIG_DIRS
将您的脚本放在该目录中
答案 8 :(得分:2)
在执行脚本的/etc/profile
中添加一个条目。这将在每次登录期间运行。如果您只是为自己的帐户执行此操作,请使用您的一个登录脚本(例如.bash_profile
)来运行它。
答案 9 :(得分:2)
在本地系统的bash手册页中搜索^ INVOCATION,以获取有关在启动时将读取哪个文件的信息。
man bash
/^INVOCATION
同样在FILES部分,
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
将脚本添加到正确的文件中。确保脚本位于$ PATH中,或使用脚本文件的绝对路径。
答案 10 :(得分:1)
脚本~/.bash_profile
在登录时运行。