我正在尝试调用 /etc/rc.local 中启动时运行的程序,该程序运行两个命令:
- 使用以下方式启动分离屏幕
screen -dmS name
- 使用以下方式向该屏幕发送命令
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