命令在 xterm 上不起作用但在 ssh 会话中起作用

命令在 xterm 上不起作用但在 ssh 会话中起作用

我安装了 Ubuntu 16.04,并安装了 Xrdp 和 Xfce4 以实现远程访问。使用 RVM 安装了 ruby​​。当我尝试访问 Ruby Interactive (irb) 时,它可以从 SSH shell 完美运行(我输入 irb,然后我就可以使用交互式 ruby​​ 环境)。但是,当我进行远程登录并使用 Xterm 时,它找不到很多命令(例如irb,, ) rebootshutdown我再次使用 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 需要配置的内容的屏幕截图

在此处输入图片描述

原文出处在这里:https://rvm.io/integration/gnome-terminal

答案2

bash在变量/中包含的冒号分隔列表中列出的目录中搜索您键入的命令(假设该命令不是别名或内置命令,并且不以“ ”开头) 。显示它。我没有安装,但和在目录中。PATHecho $PATHirbrebootshutdown/sbin/

export PATH=$PATH:/sbin

将使rebootshutdown可见。

您可以irb通过登录找到位于的位置ssh,然后

type -p irb

将此目录添加到您的PATH.

检查每个环境中的终端类型(echo $TERM),看看是否$TERM影响您的~/.bashrc

相关内容