是否可以在 bash 命令行上定义 .bash_profile 的位置?

是否可以在 bash 命令行上定义 .bash_profile 的位置?

我从 Objective C 以编程方式运行 bash 来创建一个类似终端的应用程序。启动后,我想在将控制权移交给用户之前执行一些命令。通常这些会在.bash_profile.我无法访问该文件,而且我也不想打扰我们,因为我不想影响用户的标准 bash 环境。我尝试了-c script.sh开关,但在 script.sh 运行完成后,bash 退出。除了以编程方式键入我需要运行的命令之外,还有其他选择吗?我宁愿不让用户看到一切。

答案1

您可以尝试以下操作:

bash --rcfile <your_rc_file> --noprofile -i

选项的含义:

  • --rcfile:使用以下作为启动文件
  • --noprofile:不处理文件.bash_profile.profile/etc/profile等。通常在登录 shell 中使用的文件。
  • -i:它是一个交互式 shell(有点像处理-c参数后退出的相反-c)。

联机帮助页bash还是不错的。您可以使用它来了解有关如何启动 bash 的更多详细信息。

答案2

您可以 在 的末尾使用--rcfile myfile和 have调用 bash 。这假设您正在启动一个交互式但非登录的 shell。test -f ~/.bashrc && source ~/.bashrcmyfile

对于登录 shell,您必须模仿 bash 在/etc/profile.profile.bash_profile.bash_login方面的行为.bash_logout,这很乏味但可行。你仍然会跑,bash --rcfile myfilemyfile会包含

test -r /etc/profile && source /etc/profile

for f in ~/.bash_profile ~/.bash_login ~/.profile
do
   if test -r $f
   then
      source $f
      break
   fi
done

trap 'source ~/.bash_logout' 0

相关内容