mon*_*rix 2 bash gnu-screen environment-variables
我正在尝试调用一个程序在 /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
(这是它报告的内容,如果 I echo $0
,而根的默认外壳是/bin/bash
更奇怪的是,这只发生在启动时像这样实例化的屏幕。如果我使用相同的命令来启动一个分离的屏幕,它会正常工作(并使用 /bin/bash)并且环境变量没有问题。
知道是什么原因造成的以及如何解决吗?我正在使用Ubuntu 14.04 LTS
.
也许你$SHELL
没有设置或设置为/bin/sh
?或者你的文件中有一个shell
设置?/bin/sh
.screenrc
请参阅screen
的文档:
Run Code Online (Sandbox Code Playgroud)-s program
将默认 shell 设置为指定的程序,而不是环境变量中的值
$SHELL
(或者/bin/sh
如果未定义)。这也可以通过shell
.screenrc
命令定义。另见那里。
还有:
shell command
设置用于创建新 shell 的命令。这会覆盖环境变量的值
$SHELL
。如果您想运行一个 tty-enhancer 来执行$SHELL
. 如果命令以-
字符开头 ,shell 将作为登录shell 启动。典型的 shell 在不作为登录 shell 启动时只进行最少的初始化。例如 Bash 不会读取你的,~/.bashrc
除非它是一个登录外壳。
即.screenrc
在您的主文件夹中添加以下行应该将屏幕的默认外壳设置为bash
shell /bin/bash
Run Code Online (Sandbox Code Playgroud)