1

当我从 2 个不同的场景以 root 身份运行 echo $PATH 到同一台服务器时,我得到了不同的结果。

首先,我在安装厨房的地方以 root 身份通过术语 ssh。当我输入

$ which kitchen
$ usr/local/rvm/gems/ruby-2.1.2/bin/kitchen
$ echo $PATH

我可以看到它在最后正确列出

/usr/local/rvm/gems/ruby-2.1.2/bin:/usr/local/rvm/gems/ruby-2.1.2@global/bin:/usr/local  
/rvm/rubies/ruby-2.1.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:    
/bin:/usr/games:/usr/local/games:/usr/local/rvm/bin:
/usr/local/rvm/gems/ruby-2.1.2/bin/kitchen

我正在使用我的 assembla 主机来运行 SSH 脚本(也指定 root)以及当我运行时

$ which kitchen
$ Process exited with: 1. Reason was:  ()
$ echo $PATH
$ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
  /usr/games:/usr/local/games

使用 Ubuntu 14.04

如果可能,我想知道如何从汇编帐户运行时获得与通过终端登录时相同的输出

谢谢,

4

1 回答 1

0

这很可能是拥有交互式 shell 和没有交互式 shell 之间的区别。

根据您的设置,将读取不同的环境文件,请查看您的 .bashrc 或 .profile

从 bash 手册页:

Bash 尝试确定它何时在其标准输入连接到网络连接的情况下运行,就像通过远程 shell 守护程序(通常是 rshd)或安全 shell 守护程序 sshd 一样。如果 bash 确定它正在以这种方式运行,它会从 ~/.bashrc 读取并执行命令,前提是该文件存在并且可读。

基本上,运行 `grep -r kitchen ~/.*" 来确定哪个文件将厨房添加到您的 PATH 变量中,然后您将能够确定当您使用非交互式终端 ssh 时是否正在读取该文件。

您也可以在运行脚本之前设置 PATH:

导出 PATH=/usr/local/rvm/gems/ruby-2.1.2/bin/kitchen:${PATH}

PS 在您的输出中,看起来您的 PATH 变量中有一个换行符,它不应该。

于 2014-09-04T00:57:43.097 回答