Gin*_*van 20 scripts login logout
当我在 Ubuntu 中登录和注销时,我需要运行一个脚本。
我试图将脚本放入我的~/.bash_login但它没有用。
有没有更好的位置可以运行我的脚本?
我的脚本位于/home/gsd/script/login.sh并且它是可执行的。
编辑:
我的脚本在我输入时运行:/home/gsd/script/login.sh并设置为 +x
现在,我只有:touch /home/gsd/test.txt在~/.bash_login测试。
从未创建文件 test.txt
编辑2:
gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd 29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd 220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd 3136 2011-11-04 08:00 .bashrc
Run Code Online (Sandbox Code Playgroud)
Ste*_*ski 28
如果 .bash_profile 存在,那么 Bash 将不会读取 .bash_login(或 .profile)。这个烦人的特性在 Bash 手册的某些版本中有描述,但不是全部。
.bash_profile和.bash_login是类似的,所以我建议你把你的命令放在 中.bash_profile,因为它是常用的,而且.bash_login相对不为人知。还可以考虑将您的命令放入.bashrc而不是.bash_profile. 该手册描述了“交互式非登录外壳”和“交互式登录外壳”之间的区别,因此请务必阅读该部分。
GNU Bash 参考手册 4.1 版:Bash 启动文件说:
按此顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在 且可读的命令中读取和执行命令。
另请参阅关于 superuser 的这个问题,以及这个 Bash howto(不要被 freeunix.dyndns.org:8088 地址吓倒——它仍然是一本质量很好的手册,我已经使用它多年了)。
更新,因为您说您没有 .bash_profile。
听起来您没有使用所谓的“交互式非登录 shell”(有关详细说明,请参阅 Bash 手册)。
要对此进行测试,请在每个文件中添加如下内容:.bashrc,.bash_profile和.bash_login.
echo "DEBUG: I am .bashrc"
echo "DEBUG: I am .bash_profile"
Run Code Online (Sandbox Code Playgroud)
然后注销并重新登录。当您登录时,我敢打赌您只会看到“调试:我是 .bashrc”而不是“我是 .bash_profile”。如果是这样,则意味着您是“交互式非登录 shell”,这仅意味着 Bash 会调用.bashrc但不会调用.bash_profile. 有关为什么这些 dotfiles 是这样的信息,请参阅下面的 @Andrejs Cainikovs 的帖子和http://mywiki.wooledge.org/DotFiles
小智 8
登录 shell,无论它们是交互式的还是非交互式的,都可以读取并执行.profile
交互式 shell读取并执行.bashrc.
通常,您会看到这些/etc/profile源.bashrc- 因此.bashrc,无论是交互式还是非交互式,在登录 shell 中所做的所有设置也将生效。
shell 初始化脚本的执行顺序取决于 shell 是交互式的还是非交互式的,与它是否是登录脚本无关。
当 bash 作为交互式登录 shell被调用时,它从/etc/profile. 然后 Bash 将尝试仅执行第一个文件,并且可以读取以下内容:
.bash_profile.bash_login.profile如果找到这些文件之一但无法读取,则会导致错误。还有如果有任何错误不发现。
当使用该--login选项调用非交互式登录 shell 时,将遵循相同的过程。
确保您要运行的脚本是可执行的。跑去chmod +x scriptname这样做。还要确保脚本以正确的 shebang 开头(#!/bin/bash对于 shell 脚本)。最后,在执行脚本时使用所有完整路径,例如,/usr/bin/echo不要只是echo以防脚本执行的环境与您习惯的环境不同。