amn*_*amn 5 bash environment-variables sh
我正在使用startx启动图形环境。我有一个非常简单的.xinitrc东西,我会在设置环境时添加一些东西,但现在它如下:
catwm & # Just a basic window manager, for testing.
xterm
Run Code Online (Sandbox Code Playgroud)
我之所以背景WM和前景终端,而不是周围的其他方法经常做,是因为我希望能够打字回来后给虚拟文本控制台exit在xterm。这似乎像描述的那样工作。
问题是PS1当前设置为我偏好的变量/etc/profile.d/user.sh(来自/etc/profile发行版提供),似乎没有传播到上述环境中xterm。相关进程树如下:
\_ -bash
\_ xinit /home/user/.xinitrc -- /etc/X11/xinit/xserverrc :0 -auth /tmp/serverauth.ggJna3I0vx
\_ /usr/bin/X -nolisten tcp :0 -auth /tmp/serverauth.ggJna3I0vx vt1
\_ sh /home/user/.xinitrc
\_ /home/user/catwm
\_ xterm
\_ bash
Run Code Online (Sandbox Code Playgroud)
由 启动的 shellxterm似乎是交互式的,但执行的 shell.xinitrc不是。我对两者都满意,关于交互性的假设似乎完全有效,但现在我有一个非交互式 shell,它间接生成了一个交互式 shell,而交互式 shell 没有机会自动继承提示,因为提示未设置或以其他方式使流程树的更高位置不可用。我该如何恢复我的提示?
命令env和export仅列出导出的变量。$PS1通常不导出。尝试echo $PS1在您的 shell 中查看$PS1.
非交互式 shell通常没有$PS1. 非交互式bash显式 unsets $PS1。1您可以bash通过来检查是否是交互式的echo $-。如果输出包含,i则它是交互式的。您可以使用命令行上的选项显式启动交互式 shell:bash -i。Shell 开始时-c不是交互式的。
该/etc/profile脚本读取的登录shell。您可以启动外壳由登录shell: bash -l。
使用bashshell脚本/etc/bash.bashrc,~/.bashrc通常用于设置$PS1. 这些脚本是在启动交互式非登录 shell 时获取的。这是你的情况xterm。请参阅设置 PS?字符串永久
xterm作为登录shell:bash -l。检查/etc/profile和~/.profile不含有应仅在登录后执行代码。也许需要对脚本稍作修改。dash不会取消设置$PS1。您可以像使用非交互式 shell 一样使用这样的 shell,它将运行最多xterm.$PS1:/etc/bash.bashrc或~/.bashrc。bash --rcfile <(echo "PS1=$PS1save") -istartx直到xterm 作为交互式外壳( bash -i) 启动。不幸的是,这可能会产生一些副作用,我不会这样做。| 归档时间: |
|
| 查看次数: |
7377 次 |
| 最近记录: |