Linux 如何在*nix中登录时运行脚本?
我知道我曾经知道怎么做,但是。。。如何在unix中登录时运行脚本(bash正常?该脚本Linux 如何在*nix中登录时运行脚本?,linux,bash,macos,unix,shell,Linux,Bash,Macos,Unix,Shell,我知道我曾经知道怎么做,但是。。。如何在unix中登录时运行脚本(bash正常?该脚本~/。bash\u配置文件在登录时运行。将其放置在您的: 如果您在OSX上,那么它是来自 当Bash启动时,它以各种不同的方式执行命令 脚本 当Bash作为一个交互函数调用时 登录shell时,它首先读取 执行文件中的命令 /etc/profile,如果该文件存在。 读取该文件后,它将查找 ~/.bash\u配置文件、~/.bash\u登录和 ~/.profile,按该顺序,并读取 并从第一个 一种存在且可读的
~/。bash\u配置文件在登录时运行。将其放置在您的:
如果您在OSX上,那么它是来自
当Bash启动时,它以各种不同的方式执行命令
脚本
当Bash作为一个交互函数调用时
登录shell时,它首先读取
执行文件中的命令
/etc/profile,如果该文件存在。
读取该文件后,它将查找
~/.bash\u配置文件、~/.bash\u登录和
~/.profile,按该顺序,并读取
并从第一个
一种存在且可读的东西
当登录shell退出时,Bash读取
并执行文件中的命令
~/.bash\u注销(如果存在)
当一个交互式shell不是
启动一个登录shell,Bash读取
并执行来自~/.bashrc的命令,
如果该文件存在。这可能是
通过使用--norc选项禁用。
--rcfile file选项将强制
Bash从中读取和执行命令
文件而不是~/.bashrc
使用Bash时,将为交互式登录shell运行~/.Bash\u profile
、~/.Bash\u login
和~/.profile
中的第一个。我相信除了Bash之外,~/.profile
通常由unixshell运行。Bash将为非登录交互式shell运行~/.bashrc
我通常会将所有我想一直设置的内容都放在.bashrc
中,然后从.bash\u profile
运行它,在那里我还设置了一些只有在登录时才应该运行的内容,例如设置ssh代理
或运行屏幕
,如果您希望运行一个脚本和一个脚本,您可以将其设置为用户默认的shell
echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd
* username:x:uid:grp:message:homedir:/usr/bin/uptime
可以产生有趣的效果:)(这不安全,所以不要太信任它。没有什么比将默认shell设置为擦除驱动器的脚本更好的了……尽管,…我可以想象这样的场景会非常有用)在执行脚本的/etc/profile
中添加一个条目。这将在每次登录期间运行。如果您仅为自己的帐户执行此操作,请使用您的一个登录脚本(例如,.bash\u profile
)来运行它。在登录时,大多数shell都会执行登录脚本,您可以使用它来执行自定义脚本。当然,shell执行的登录脚本取决于shell:
- bash:.bash\u profile、.bash\u login、.profile(用于向后兼容)
- 上海:。个人资料
- tcsh和csh:.登录
- zsh:.zshrc
您可以通过执行以下操作来了解您正在使用的shell
echo $SHELL
从提示中
对于“登录”的更广泛的定义,知道在大多数发行版上启动X时,.xsessionrc将在启动X会话时执行是很有用的。搜索本地系统的bash手册页,查找^INVOCATION以获取启动时将读取的文件的信息
man bash
/^INVOCATION
在文件部分
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
将脚本添加到适当的文件中。确保脚本位于$PATH中,或使用脚本文件的绝对路径。启动是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>
标签
com.bob
运行负荷
程序参数
/usr/bin/java
-罐子
/Users/user/program.jar
我对这个问题沮丧了好几天。在ubuntu上什么都没用。如果我把调用放在/etc/profile中,那么在尝试登录时它就会崩溃。我不能使用“启动应用程序”,因为这不是我想要的。仅为当前用户设置脚本
最后我找到了这篇小文章:
解决办法是:
查找$XDG\u CONFIG\u目录路径:
echo$XDG\u配置\u目录
将脚本放在该目录中
echo$0应该会显示正在使用哪个shell,虽然我偶尔会看到“sh”报告,但我认为在HP-UX或Solaris上它实际上是“ksh”。什么登录?用户界面登录?像侏儒,GTK,统一?也许是来自tty的新shell登录?他们之间的区别是什么?仅仅十年后,但是:如果该命令需要sudo(例如,将网络共享从NAS安装到用户的home dir中)怎么办@Mike'Pomax'Kamermans问得好,也许sudo是假定的,因为它在系统的文件中?也许,但也许不是-希望有人仍然能为我们回答这个问题=(
<?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>