我知道我曾经知道如何做到这一点,但是......如何在unix登录时运行脚本(bash可以)?

有帮助吗?

解决方案

维基百科 Bash

当Bash启动时,它将在各种不同的脚本中执行命令。

当Bash被称为交互式登录外壳时,如果该文件存在,它首先从文件 /etc /profile执行命令。阅读该文件后,它以该顺序寻找〜/.bash_profile,〜/.bash_login和〜/.profile,并从存在且可读的第一个命令中读取和执行命令。

当登录外壳退出时,bash读取并执行文件〜/.bash_logout(如果存在)。

当启动非登录外壳的交互式外壳时,如果该文件存在,则BASH将从〜/.bashrc读取并执行命令。这可以通过使用-norc选项来抑制这一点。-rcfile文件选项将迫使Bash从文件而不是〜/.bashrc读取和执行命令。

其他提示

登录时,大多数 shell 都会执行登录脚本,您可以使用该脚本来执行自定义脚本。当然,shell 执行的登录脚本取决于 shell:

  • 重击:.bash_profile、.bash_login、.profile(用于向后兼容)
  • 嘘:。轮廓
  • tcsh 和 csh:。登录
  • 兹什:.zshrc

您可能可以通过执行以下操作找出您正在使用的 shell

echo $SHELL

从提示中。

对于“登录”的更广泛的定义,了解在大多数发行版上,当 X 启动时,您的 .xsessionrc 将在您的 X 会话启动时执行,这是很有用的。

使用 Bash 时,第一个 ~/.bash_profile, ~/.bash_login~/.profile 将针对交互式登录 shell 运行。我相信 ~/.profile 除了 Bash 之外,通常由 Unix shell 运行。bash 将运行 ~/.bashrc 用于非登录交互式 shell。

我通常把我想要设置的一切都放进去 .bashrc 然后运行它 .bash_profile, ,我还设置了一些仅在登录时运行的内容,例如设置 ssh-agent 或跑步 screen.

如果你想跑步 脚本和 仅有的 通过一个脚本,您可以使其成为用户默认的 shell。

echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd  
  * username:x:uid:grp:message:homedir:/usr/bin/uptime

可以产生有趣的效果:)(虽然它不安全,所以不要太相信它。没有什么比将默认 shell 设置为擦除驱动器的脚本更好的了。...虽然, ..我可以想象一个场景,这可能非常有用)

如果你使用的是 OSX,那么它是 ~/.profile

将其放入您的 bash 配置文件:

~/.bash_profile

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>

我为这个问题郁闷了好几天。ubuntu 上没有任何效果。如果我将调用放入 /etc/profile 中,则在尝试登录时一切都会崩溃。我无法使用“启动应用程序”,因为这不是我想要的。这仅为当前用户设置脚本。

最后我找到了这篇小文章: http://standards.freedesktop.org/autostart-spec/autostart-spec-0.5.html

解决方案是:

  1. 找出 $XDG_CONFIG_DIRS 路径:

    回显$XDG_CONFIG_DIRS

  2. 将你的脚本放在该目录中

添加一个条目 /etc/profile 执行脚本。这将在每次登录期间运行。如果您仅为自己的帐户执行此操作,请使用您的登录脚本之一(例如 .bash_profile)来运行它。

在本地系统的 bash 手册页中搜索 ^INVOCATION 以获取有关启动时将读取哪个文件的信息。

man bash
/^INVOCATION

同样在“文件”部分中,

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

将您的脚本添加到正确的文件中。确保脚本位于 $PATH 中,或使用脚本文件的绝对路径。

剧本 ~/.bash_profile 在登录时运行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top