我安装了 Ubuntu 16.04,并安装了 Xrdp 和 Xfce4 以实现远程访问。使用 RVM 安装了 ruby。当我尝试访问 Ruby Interactive (irb) 时,它可以从 SSH shell 完美运行(我输入 irb,然后我就可以使用交互式 ruby 环境)。但是,当我进行远程登录并使用 Xterm 时,它找不到很多命令(例如irb
,, ) reboot
,shutdown
我再次使用 RVM 查询并发现 ruby 已安装。这不仅与 ruby 有关,我发现许多其他命令都无法访问。
当我输入
echo $SHELL
我懂了
/bin/bash
答案1
看起来您的 PATH 变量是根据如何进入 shell 而不同地构造的。
你可以再检查一下
echo $PATH
差异。
我没有使用过 Ruby 环境,但我可以想象有一个脚本可以设置一切(例如使用 node/npm)。
Bash 可能正在获取多个脚本,如 /etc/profile、~/.profile ~/.bash_rc、/etc/bash.bashrc。
也许您的 xterm 配置使用了 --noprofile 或 --norc 或者它没有作为登录 shell 调用,因此没有提供用于设置 Ruby 环境的相关部分。
来自 man bash:
When bash is invoked as an interactive login shell, or as a non-
inter-active shell with the --login option, it first reads and
executes com-mands from the file /etc/profile, if that file exists.
After reading that file, it looks for ~/.bash_profile, ~/.bash_login,
and ~/.profile, in that order, and reads and executes commands from
the first one that exists and is readable. The --noprofile option
may be used when the shell is started to inhibit this behavior.
和
When an interactive shell that is not a login shell is started, bash
reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if
these files exist. This may be inhibited by using the --norc option.
编辑:以下是显示 xterm 需要配置的内容的屏幕截图
答案2
bash
在变量/
中包含的冒号分隔列表中列出的目录中搜索您键入的命令(假设该命令不是别名或内置命令,并且不以“ ”开头) 。显示它。我没有安装,但和在目录中。PATH
echo $PATH
irb
reboot
shutdown
/sbin/
export PATH=$PATH:/sbin
将使reboot
之shutdown
可见。
您可以irb
通过登录找到位于的位置ssh
,然后
type -p irb
将此目录添加到您的PATH
.
检查每个环境中的终端类型(echo $TERM
),看看是否$TERM
影响您的~/.bashrc
。