当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
运行的后台脚本,例如签入脚本,作业脚本等。答案 0 :(得分:1)
当你将-l
参数传递给bash时,你会告诉它表现为登录shell;这包括运行用户的.profile
。
如果您不想要这种行为,请不要传递-l
。因此:
bash -c 'ruby some/other/script.rb'
那就是说,直接调用ruby
而没有任何封闭的shell就没有优势:
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...'