[英]Execute a bash script the first time shell opens
有没有办法每天自动执行 bash 脚本,也就是说我希望每天第一次打开 shell 终端时执行 bash 脚本?
谢谢!
如果你想脚本的时候,你只打开外壳终端运行,它添加到您~/.bashrc
, /etc/bash.bashrc
或/etc/bashrc
文件。 这将在任何时候启动交互式非登录shell时执行。
如果您希望每天执行它,请在/etc/crontab
或crontab -e
为它创建一个cron
从用户的角度来看,Bash有两个文件在启动时执行“setup”:
.bash_profile
- 只要打开交互式登录 shell,就会执行此文件。 在某些发行版或配置中,此文件也可能被命名为.profile
。 .profile
通常用于非Bash特定配置项。 另请注意,如果你使用了很少的.bash_login
, .bash_profile
将阻止使用该文件,尽管它是等效的。 .bash_profile
是标准的。 .bashrc
- 为所有其他bash实例执行此文件。 请注意,人们通常从.bash_profile
调用.bashrc
来创建一致性。 登录时会生成登录shell; 通过ssh,telnet,在控制台等处。你也可以通过在su
下启动shell来强制启动登录shell(强制.bash_profile),如下所示:
su - username
这里,破折号表示应该将其作为登录shell处理。
但是,除非您确定每天登录一次且每天只登录一次,否则这些似乎都不是您问题的正确答案。
在您的情况下,更好的方法是使用cron
。 Crontab允许您安排作业以任何所需的间隔运行。 对于日常执行,您可能需要像这样配置的行:
0 5 * * * /home/user/script
这将导致用户的脚本每天凌晨5点执行。 列是:
0 5 * * *
^ ^ ^ ^ ^------ Day of week
^ ^ ^ ^-------- Month of year
^ ^ ^---------- Day of month
^ ^------------ Hour of day
^-------------- Minute of hour
这些字段中的每一个也可以表示逗号分隔列表或甚至算术表达式。 例如,以下将在凌晨5点执行脚本四次:
*/4 5 * * *
虽然提供了信息,但所提供的答案实际上并不能解决原始需求。
请求是让脚本每天运行一次,在第一次登录时,而不是当天的 rest,而是在第二天第一次登录时再次运行,然后是下一天,等等......
为此,您可以将要执行的脚本放在 ~/bin 或您想要的任何位置。
在 script.sh 的底部添加这三行,这将在后续登录时删除脚本的执行。
cat ~/.bash_profile | grep -v script.sh > bash_profile.tmp
rm -f ~/.bash_profile
mv bash_profile.tmp ~/.bash_profile
这三行的作用:
然后,使用“crontab -e”在 crontab 中添加一行,这将在您认为是在您当天最后一次登录之后但在您第一次登录天。
此示例设置为零分钟 + 四个小时,即凌晨 4:00。
0 4 * * * echo "~/bin/script.sh" >> ~/.bash_profile
然而,这存在一个问题。
例如,如果用户只登录到系统 MF 而不是周六或周日。 crontab 仍会将行添加到配置文件周六和周日早上,这意味着周一早上将有三行相同的行。 这将导致脚本运行三次。
为了缓解这种情况,在它周围环绕了一个 IF 语句,以在添加命令之前检查该命令是否已存在于文件中。
0 4 * * * if [ "$(grep -c '~/bin/script.sh' ~/.bash_profile)" -eq 0 ]; then echo "~/bin/script.sh" >> ~/.bash_profile ; fi
最终结果是:
注意:这可能不是最有效的或 eloquent 解决方案,但它确实有效,而且非常容易理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.