我从 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 ~/.bashrc
myfile
对于登录 shell,您必须模仿 bash 在/etc/profile
、.profile
、.bash_profile
和.bash_login
方面的行为.bash_logout
,这很乏味但可行。你仍然会跑,bash --rcfile myfile
但myfile
会包含
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