簡體   English   中英

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

[英]How do I set $PATH such that `ssh user@host command` works?

我似乎無法設置一個新的$ PATH,以便在通過ssh user@host command執行命令時使用它。 我嘗試在遠程計算機export PATH=$PATH:$HOME/new_pathexport PATH=$PATH:$HOME/new_path和〜/ .profile中的export PATH=$PATH:$HOME/new_path到,但是執行ssh user@host "echo \\$PATH"表示尚未獲取更改(它顯示/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games)。 遠程計算機正在運行Ubuntu 8.04。

我確信我可以將其破解到/ etc / profile中,但這不是一個干凈的解決方案,只有在具有root訪問權限時才有效。

正如grawity所說,〜/ .bashrc就是你想要的,因為它是由非交互式非登錄shell提供的。

我希望你遇到的問題與默認的Ubuntu~ / .bashrc文件有關。 它通常以這樣的東西開頭:

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

您希望此行之前為非交互式shell添加任何內容。

你有~/.bash_login~/.bash_profile嗎?

交互模式下的Bash檢查這些文件,並按以下順序使用第一個現有文件:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

所以如果你有一個~/.bash_profile ,那么你對~/.profile做的任何改變都將是看不見的。

非交互模式下的Bash 有時會讀取文件~/.bashrc (它也經常來自交互式腳本。)“有時”我的意思是它依賴於分布:很奇怪,有一個編譯時啟用此選項的選項。 Debian啟用了~/.bashrc讀取,而例如Arch沒有。

ssh似乎使用非交互模式, 所以~/.bashrc就足夠了。 遇到這樣的問題時,我通常會添加一些echo來查看正在運行的文件。

ssh文檔說:

如果指定了command,則在遠程主機上執行它而不是登錄shell。

這就是為什么添加到bashrc文件不起作用。 但是你有以下選擇:

  1. 如果在sshd配置中設置了PermitUserEnvironment選項,則可以將PATH設置添加到~/.ssh/environment

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

你總是可以說:

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

我自己也遇到了同樣的問題,用以下方法解決了:

ssh user@remotehost PATH=\$HOME/bin:\$PATH\; remote-command

除@signpolyma答案外,您還必須在這些行之前添加導出

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM