如何在*nix中登录时运行脚本?

Nat*_*ate 68 unix linux macos bash shell

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

Sve*_*vet 111

来自维基百科Bash

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

当Bash作为交互式登录shell调用时,它首先从文件/ etc/profile中读取并执行命令(如果该文件存在).在读取该文件之后,它按顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个命令中读取并执行命令.

当登录shell退出时,Bash从文件〜/ .bash_logout读取并执行命令(如果存在).

当启动不是登录shell的交互式shell时,如果该文件存在,Bash将从〜/ .bashrc读取并执行命令.使用--norc选项可以禁止此操作.--rcfile文件选项将强制Bash从文件而不是〜/ .bashrc读取和执行命令.

  • 仅晚了十年,但是:如果该命令需要sudo(例如,将来自NAS的网络共享安装到用户的主目录中)该怎么办? (2认同)

pjz*_*pjz 27

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

  • bash:.bash_profile,.bash_login,.profile(用于向后兼容性)
  • sh:.profile
  • tcsh和csh:.login
  • zsh:.zshrc

你可以通过这样做找出你正在使用的shell

echo $SHELL
Run Code Online (Sandbox Code Playgroud)

从提示.

对于稍微宽泛的"登录"定义,知道在启动X时大多数发行版都很有用,你的.xsessionrc将在你的X会话启动时执行.


Mic*_*son 9

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

我通常把我想要的所有内容都放在其中.bashrc,然后运行它.bash_profile,在那里我还设置了一些应该在我登录时运行的东西,比如设置ssh-agent或运行screen.


Ken*_*ric 5

如果您希望运行一个脚本而运行一个脚本,则可以将其设置为用户默认shell.

echo "/usr/bin/uptime" >> /etc/shells
vim /etc/passwd  
  * username:x:uid:grp:message:homedir:/usr/bin/uptime
Run Code Online (Sandbox Code Playgroud)

可以有有趣的效果:)(它不安全,所以不要太信任它.没有什么比设置你的默认shell是擦除你的驱动器的脚本....虽然,...我可以想象一个场景,可能非常有用)