如何编写在登录时执行的Shell脚本?


16

我正在尝试在Ubuntu 11.10 Linux发行版中编写bash shell脚本,该脚本将在登录系统时自动执行。但是我无法弄清楚在脚本中写入的内容将在登录时自动执行。

Answers:


18

如果您希望它是全局的,请修改

 /etc/profile 

或将脚本添加到

 /etc/profile.d

如果希望它是特定于用户的,请修改

 /home/$USER/.profile

1
.sh如果您将脚本放在中,请不要忘记扩展名应该是/etc/profile.d/chmode +x /etc/profile.d/myscript.sh当然也是。
Brian Haak

覆盆子拉伸。尝试/usr/local/bin/pihole -c在特定用户的自动登录上运行命令。将此行添加到/home/$USER/.profile-没有任何反应。当我向其中添加脚本时,/etc/profile.d它可以工作,但是它是全局的,即使在我打开ssh会话时也可以运行它(这不是我想要的)。添加到.bashrc工程也可以,但是只要我打开新的shell即可运行(这不是我想要的)。问题:为什么添加/home/$USER/.profile不起作用???
提请

3

只需将bash脚本添加到Startup应用程序。

在命令字段中,输入

bash /full/path/to/bash/script.sh/

2
如何从命令行将“ bash /.../script.sh”添加到启动应用程序?
aleb

1
OP从未提及GUI。如果他们通过SSH远程服务器上什么,不具备一个GUI?没有一个桌面标签被应用到这个问题上……
Doktor J

该标题在登录时特别提及,而与桌面GUI无关。
RichieHH

0

如果您想更特定于bash,也可以在〜/ .bash_profile或〜/ .bash_login中编写代码。

您可以在其中提供任何脚本,例如:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

0

/etc/profile$HOME/.profile$HOME/.bash_profile

/etc/profile.d/yourscript.sh如果会产生输出,我强烈建议您不要使用。当您使用非交互式会话时,您将收到一条$TERM is not set消息。使用ssh协议(例如scp)时,这很明显。通常,这没什么大不了,但是,Veeam不喜欢它,并且会发出警告。我知道Veeam不在这里,但是值得一提的是,并非所有应用程序都会优雅地忽略该$TERM is not set警告。

简而言之,如果脚本生成输出,请将其放置在第一行中指定的位置。但是,如果您正在修改环境,而您的脚本没有生成输出,请使用后者。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.