繁体   English   中英

Linux .profile覆盖其他bash命令

[英]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我考虑到运行在结束脚本~/.profilemenu.sh 我怎样才能避免这种情况发生?

从长远来看,这是我需要做的事情:

  1. 服务器启动,将用户带到/root/menu.sh
  2. 有一些通过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM