Answers:
如果您只想发送PS1
变量,并且其中不包含'
(单引号),请尝试:
ssh targethost -t "PS1='$PS1'; exec bash"
不过,当地人.bashrc
可能会改写PS1
(感谢Dennis Williamson指出这一点)。
有多种方法可以通过ssh传输环境变量,但是通常在服务器配置中将其禁用。如果PermitUserEnvironment
在服务器配置中启用了伪指令,并且每个用户都有自己的密钥对(是的,您可能不太幸运),则可以将其添加environment="PS1=…"
到与~/.ssh/authorized_keys
密钥相对应的行中。
如果要在共享用户帐户上保留自己的配置,则可以创建自己的配置文件目录,并将HOME
环境变量设置为指向该目录。
ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/
mrstatic.home
当您要与其他用户共享文件时,在目录中创建指向父目录中相应条目的符号链接。
然后,使用
ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`
如果您愿意修改远程.profile
文件(或其他初始化文件),则可以自动进行设置。许多站点都允许LC_*
环境变量通过(通常将它们用于语言环境设置)。如果同时满足这两个条件,则可以LC_USER
在客户端上设置一个实际上不用于语言环境的变量,然后在服务器中对其进行测试.profile
。
(当然,共享帐户不是一个好主意,但我知道您可能无法改变这种情况。)
ssh -t user@host "remote='$PS1' bash -i"
然后,在提示符下:
PS1=$remote
PS1
在shell启动过程中被覆盖并不罕见。没有执行官:在我的系统上进行测试时,似乎没有什么区别-没有额外的过程。
.bashrc
很可能会覆盖PS1
。
不共享登录名。像自己一样使用SSH,然后执行sudo -su shareduser
(-s
表示“ shell”)。
请sudo
保持你的主目录:
Defaults env_keep += "HOME"
如果您想这样做而无需额外的scp,则可以执行以下操作:
ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'
这将生成一个基于服务器bashrc的.bashrc.n,但带有您的替代项。
如果您愿意不知不觉地对您的同事打扰,并且您可以相信他们不会干扰您的偏好,那么我建议您结合使用cYrus的答案, akira的答案和Dennis Williamson的答案。
~/.bashrc
并添加如果[“ $ Unf” = 1]#Unfundednut的特殊代码 然后 PS1 =“ (您想要的提示) ” (任何其他自定义你想要的) 网络连接在末尾。尽管您的同事“不希望[您]写出基本资料”,但除非去寻找,否则他们不会意识到这一点。
ssh -t 用户 @ 主机 “ Unf = 1 bash -i”虽然您可能希望将其放入本地帐户的别名或shell函数中,但它足够短-比任何其他答案都短-您可以轻松地手动键入它。
我相信这很清楚,但是:当您登录该ssh
命令时,该命令将导致Unf
在远程服务器上设置该变量。这将在remote中调用您的代码.bashrc
,这将使您的自定义生效。由于您将代码放在的末尾.bashrc
,因此它将覆盖文件前面的常规设置。
披露:我尚未对此进行测试。
最简单的方法是恕我直言:
ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'
PROMPT_COMMAND
(每次shell发出提示时都会执行)似乎是解决此问题的一种非常繁琐的方法。而且,由于它有些不可思议,因此任何暗示它的答案都应该对它的工作原理进行解释。
您可以做一些事情,例如通过sshfs / nfs安装房屋,但是最简单的解决方案是将bashrc扩展到新计算机上。这也带来了别名和其他东西。
"PS1='$PS1' bash -i"
(为什么也不要exec
)?