![](/img/trans.png)
[英]Logn in to one remote machine shows as -bash-4.2$ in terminal while user@host$ on other remote servers? How to fix this?
[英]How do I set $PATH such that `ssh user@host command` works?
我似乎無法設置一個新的$ PATH,以便在通過ssh user@host command
執行命令時使用它。 我嘗試在遠程計算機export PATH=$PATH:$HOME/new_path
〜 export 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檢查這些文件,並按以下順序使用第一個現有文件:
~/.bash_profile
~/.bash_login
~/.profile
所以如果你有一個~/.bash_profile
,那么你對~/.profile
做的任何改變都將是看不見的。
非交互模式下的Bash 有時會讀取文件~/.bashrc
(它也經常來自交互式腳本。)“有時”我的意思是它依賴於分布:很奇怪,有一個編譯時啟用此選項的選項。 Debian啟用了~/.bashrc
讀取,而例如Arch沒有。
ssh
似乎使用非交互模式, 所以~/.bashrc
就足夠了。 遇到這樣的問題時,我通常會添加一些echo來查看正在運行的文件。
ssh文檔說:
如果指定了command,則在遠程主機上執行它而不是登錄shell。
這就是為什么添加到bashrc文件不起作用。 但是你有以下選擇:
如果在sshd配置中設置了PermitUserEnvironment
選項,則可以將PATH設置添加到~/.ssh/environment
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.