屏幕的默认环境是 /bin/sh,但它应该是 /bin/bash?

屏幕的默认环境是 /bin/sh,但它应该是 /bin/bash?

我正在尝试调用 /etc/rc.local 中启动时运行的程序,该程序运行两个命令:

  1. 使用以下方式启动分离屏幕screen -dmS name
  2. 使用以下方式向该屏幕发送命令screen -S name -X stuff command

但是该命令依赖于所设置的环境变量。我在根 .profile 和根 .pam_environment 文件中都设置了这些 EXPORT 命令。作为参考,它们是:

export PATH=$PATH:/usr/local/cuda-7.0/bin

export LD_LIBRARY_PATH=:/usr/local/cuda-7.0/lib64

然而,启动屏幕无法看到这些变量和错误error while loading shared libraries: libcudart.so.7.0: cannot open shared object file: No such file or directory- 如果没有设置这些变量,这就是我所期望的。

问题是我不知道为什么它们没有设置。我最好的猜测是,出于某种原因,屏幕正在使用/bin/sh(如果我输入 ,它会报告此情况echo $0,而 root 的默认 shell 是/bin/bash

更奇怪的是,这种情况只发生在启动时实例化的屏幕上。如果我使用相同的命令启动分离的屏幕,一切都会正常工作(并使用 /bin/bash),环境变量没有任何问题。

知道是什么原因造成的,如何修复吗?我正在使用Ubuntu 14.04 LTS

答案1

也许您的$SHELL未设置或设置为/bin/sh?或者您的文件中已shell设置为?/bin/sh.screenrc

参见screen的文档:

-s program

将默认 shell 设置为指定的程序,而不是环境变量中的值 $SHELL (或 /bin/sh 如果未定义)。这也可以通过命令来定义shell .screenrc。另请参阅。

还有:

shell command

设置用于创建新 shell 的命令。这将覆盖环境变量的值$SHELL。如果您想要运行一个期望执行 中指定的程序的 tty-enhancer,这将非常有用$SHELL。如果命令以字符开头 ,则 shell 将作为登录 shell 启动。当不作为登录 shell 启动时,典型的 shell 仅进行最少的初始化。例如,除非它是登录 shell,否则-Bash 将不会读取您的命令 。~/.bashrc


即在你的主文件夹中添加以下行.screenrc应该将屏幕的默认 shell 设置为bash

shell /bin/bash

相关内容