[英]Linux .profile overrides other bash commands
当root用户登录到他们的Linux服务器时,我正在加载脚本(whiptail),效果很好。 问题是,现在,当我尝试从命令提示符(或crontab)运行其他脚本时,将加载初始脚本,而看起来好像我不想运行的脚本。
这是~/.profile
样子:
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
mesg n
source /root/menu.sh
所以,当我试图运行bash -lc 'ruby some/other/script.rb
我考虑到运行在结束脚本~/.profile
是menu.sh
。 我怎样才能避免这种情况发生?
从长远来看,这是我需要做的事情:
/root/menu.sh
crontab
运行的后台脚本,例如签入脚本,作业脚本等。 当将-l
参数传递给bash时,是在告诉它充当登录外壳程序; 这包括运行用户的.profile
。
如果您不想要这种行为,请不要传递-l
。 从而:
bash -c 'ruby some/other/script.rb'
就是说,这样做比直接调用ruby
而不带任何外壳没有好处:
ruby some/other/script.rb
如果您想要运行用户的.profile
其他效果,则可以设置一个环境变量以指示您要绕过此行为:
# in the user's login scripts
[ -n "$skip_menu" ] || source /root/menu.sh
...接着...
skip_menu=1 bash -lc '...your command here...'
...或者,如果在没有封闭外壳的情况下执行...
env skip_menu=1 bash -lc '...your command here...'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.