題 Putty:登錄,執行命令/更改環境變量,不要關閉會話


我想以這樣的方式配置我的PuTTY會話,以便我可以登錄到遠程主機,並且(a)啟動bash(b)更改PS1變量(提示內容)(c)正常繼續在會話中工作。

我試過了:

  1. 連接 - >數據 - >環境變量[不起作用;會話看起來好像(b)沒有被執行]
  2. 連接 - > SSH - >遠程命令:PS1 =“一些東西”[會話窗口打開幾分之一秒,然後關閉]

有任何想法嗎?我在論壇中看過一些類似的問題,但沒有找到任何有用的信息。

更一般地說:我登錄到許多用戶以單個用戶身份登錄的主機,因此他們都共享單個用戶的“設置”。我尋找一種強制PuTTY暫時改變其中一些設置的方法(即,它們將限制在我使用PuTTY打開的會話中)。在會話中運行個人版本的.bashrc。希望這是有道理的。


3
2018-01-29 17:09


起源




答案:


目標服務器需要 配置為接受 為第一個選項設置環境變量。第二個實際上工作正常,問題是它的設計是為了模仿

ssh user@foo command

這將只是連接,運行 command 並退出。你可以讓它保持開放 command; bash 但這不適用於設置變量sice將在設置變量後啟動新的shell。

因此,如果沒有對服務器的root訪問權限以便您可以啟用環境變量的設置,那麼我能想到的唯一方法就是編輯 ~/.bashrc  服務器並定義你的 PS1 那裡。添加此行 ~/.bashrc

PS1="some stuff"

現在,每次登錄該服務器時,都會為您設置提示。


另一種方法是為你的bash會話使用不同的rcfile。使用以下行創建一個新文件:

source /etc/profile
source ~/.bashrc
PS1='some stuff'

例如,保存為 ~/.myps1,然後在您的putty設置中,將命令設置為在遠程服務器上運行:

bash --rcfile ~/.myps1

這將在遠程服務器上打開一個新的shell會話,並在上面首先讀取的文件中讀取 .bashrc 然後設置 PS1


2
2018-01-29 17:36



我在原始問題上添加了一個註釋。問題是.bashrc在登錄的所有用戶之間共享,我無法修改它...我可以創建一個個性化的.bashrc-my,但是我仍然不知道如何在登錄時調用它與膩子。 - Simon Righley
@SimonRighley好的,您可以設置服務器以允許設置env變量,如我鏈接的帖子中所述?您可以隨時向共享.bashrc添加別名: alias ps1="PS1='some stuff'" 然後每次登錄時運行別名。 - terdon
@SimonRighley查看另一個解決方案的更新答案。 - terdon
太棒了!這就是訣竅:)非常感謝你!花了很多時間試圖解決這個問題......我現在可以定義所有類型的別名,變量以及〜/ .myps1中沒有的內容(我稱之為〜/ .bashrc-my_name),你所描述的協議會尊重來自默認.bashrc的設置,然後(在它之上?)它將讀入我將在bashrc-my_name中定義的所有內容? - Simon Righley
@SimonRighley是的。只要您採購全球 .bashrc 首先,你之後做的任何事情都將取代你所擁有的任何設置 .bashrc。設置中 .bashrc 不會被命令覆蓋的 .bashrc-my_name 會堅持下去。 - terdon


嘗試將遠程命令設置為類似的 export PS1='foo'; /usr/bin/bash...在設置PS1後應該生成一個bash會話。


0
2018-01-29 17:54



這不會因為PS1將在新shell啟動後重置 PS1 通常設置在一個全局配置文件中。 - terdon
它在我的環境中工作,但每個人的設置可能有所不同。作為參考,我針對HP-UX進行了測試,這無疑是不常見的。 - BowlesCR
我報告說,不幸的是,它沒有幫助。該 PS1 值返回默認值。 - Simon Righley
@BowlesCR它的工作原因可能是因為你的PS1沒有設置在任何默認的rcfiles中。在大多數情況下,啟動新shell將使用默認啟動文件中的任何內容覆蓋導出的PS1。 - terdon


對於那些,由於各種原因無法修改sshd配置和/或有+2000服務器(並且無法訪問大規模配置工具或不能/不想更改其他用戶的設置),這是我提出的解決方案有:

enter image description here

在PuTTY中加載所需的會話,轉到Connection> SSH。在“要發送到服務器的數據”部分中,在“遠程命令”字段中使用:

env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...] bash

例:

env -u PS1 PS1="[\u@\h]\\$ " bash

我首先取消了變量,因為它不起作用。


0
2018-05-20 11:33