当前位置:  开发笔记 > 编程语言 > 正文

如何设置$ PATH使`ssh user @ host command`有效?

如何解决《如何设置$PATH使`sshuser@hostcommand`有效?》经验,为你挑选了4个好方法。

我似乎无法设置一个新的$ PATH,以便在执行命令时使用它ssh user@host command.我已经尝试export PATH=$PATH:$HOME/new_path在远程机器上添加〜/ .bashrc和〜/ .profile,但是执行ssh user@host "echo \$PATH"表明没有获取更改(它显示/ usr/local/sbin:/ usr/local/bin:/ usr/sbin目录:在/ usr/bin中:/ sbin目录:/ bin中:在/ usr /游戏).远程计算机正在运行Ubuntu 8.04.

我确信我可以将其破解到/ etc/profile中,但这不是一个干净的解决方案,只有在具有root访问权限时才有效.



1> singpolyma..:

正如grawity所说,〜/ .bashrc就是你想要的,因为它是由非交互式非登录shell提供的.

我希望你遇到的问题与默认的Ubuntu~/.bashrc文件有关.它通常以这样的东西开头:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

您希望此行之前为非交互式shell添加任何内容.


.bashrc不可靠.man bash:"Bash尝试确定何时将其标准输入连接到网络连接".这适用于RHEL,但不适用于Archlinux.我不得不编辑/ etc/environment来更改默认的PATH

2> grawity..:

你有一个~/.bash_login还是~/.bash_profile

交互模式下的Bash检查这些文件,并按以下顺序使用第一个现有文件:

    ~/.bash_profile

    ~/.bash_login

    ~/.profile

所以,如果你有一个~/.bash_profile,那么你做的任何改变都~/.profile将是看不见的.

非交互模式下的Bash 有时会读取文件~/.bashrc(通常也是来自交互式脚本的文件.)"有时"我的意思是它依赖于分发:非常奇怪,有一个编译时选项可以启用此功能.Debian支持~/.bashrc阅读,而Arch则没有.

ssh 似乎是在使用非交互模式, 所以~/.bashrc应该够了.遇到这样的问题时,我通常会添加一些echo来查看正在运行的文件.


如果你想要一个非交互式的非登录shell来源`〜/ .bashrc`,你似乎需要另外设置环境变量`BASH_ENV`; 见http://superuser.com/a/585699/100843.对于非交互式登录shell,您可能必须修改您提到的三个启动脚本之一.
对于ZSH,非交互式文件是:`.zshenv`
@math` .zshenv`总是来源; 它是否具有互动性并不重要.

3> Hasturkun..:

ssh文档说:

如果指定了command,则在远程主机上执行它而不是登录shell.

这就是为什么添加到bashrc文件不起作用.但是你有以下选择:

    如果PermitUserEnvironment在sshd配置中设置了该选项,则可以将PATH设置添加到~/.ssh/environment

    ssh remotemachine 'bash -l -c "somecommand"'



4> Chas. Owens..:

你总是可以说:

ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有