有没有一种方法可以每天自动执行一个bash脚本,也就是说,我希望每天打开shell终端时都会执行这个脚本?
谢谢!
谢谢!
如果您希望脚本仅在打开shell终端时运行,请将其添加到您的~/.bashrc
,/etc/bash.bashrc
或/etc/bashrc
文件中。这将在启动交互式非登录shell时随时执行。
如果您希望每天执行它,请在/etc/crontab
或crontab -e
中创建一个cron。
Bash有两个文件,从用户的角度来看,在启动时执行"设置":
.bash_profile
- 每次打开一个交互式登录shell时都会执行此文件。在某些发行版或配置中,该文件也可能被命名为.profile
。 .profile
通常用于非Bash特定的配置项。还要注意,如果您有很少使用的.bash_login
,.bash_profile
将阻止该文件的使用,尽管它在其他方面是等效的。.bash_profile
是标准的。.bashrc
- 此文件对所有其他bash实例执行。请注意,人们通常从.bash_profile
调用.bashrc
以创建一致性。当您登录时,将生成一个登录shell;通过ssh、telnet、控制台等方式。您还可以强制启动一个登录shell(强制处理.bash_profile),方法是在su
下启动shell:
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 * * *
. ~/.bash_profile
或source ~/.bash_profile
来“加载”您的bashrc文件以“激活”该文件。 - Justin Ecat ~/.bash_profile | grep -v script.sh > bash_profile.tmp
rm -f ~/.bash_profile
mv bash_profile.tmp ~/.bash_profile
0 4 * * * echo "~/bin/script.sh" >> ~/.bash_profile
0 4 * * * if [ "$(grep -c '~/bin/script.sh' ~/.bash_profile)" -eq 0 ]; then echo "~/bin/script.sh" >> ~/.bash_profile ; fi
注意:这可能不是最有效或最优雅的解决方案,但它确实可行,并且非常容易理解。
~
或/etc
中添加的区别。前者仅适用于~
所指的用户,而/etc
将适用于所有用户。 - fedorqui