我正在使用tcsh
,并且对于特定项目,我团队的每个成员都使用同一用户连接到服务器。 (这是我们无法改变的)。
出现这种情况是因为我想要一些自定义环境变量和别名,为此我有自己的 .tcshrc 文件(即.tcshrc_cust
),我在连接到该机器时将其作为第一个操作加载:
source .tcshrc_cust
尽管这工作得很好,但我在使用时遇到了一个问题vim
:如果我从 vim 内部进入 shell(使用:sh
),我会进入一个普通的 shell,没有我的自定义环境。变量。和别名。
除了在该机器上使用不同的用户之外,还有其他解决方案吗?
解决方案(由@Shawn给出):
我将我的密钥添加.ssh/authorized_keys
为前缀:
command="setenv subuser noz; tcsh"
并在文件末尾写下.tcshrc
这些行:
if ($?subuser) then
source .tcshrc_$subuser;
endif
现在一切正常。
答案1
您可以.tcshrc
检查特殊的环境变量(如subuser
),并有条件地进行检查source .tcshrc_cust
。当您登录时,运行subuser=nozimica tcsh
.它将获取该环境变量并执行您的自定义 rc 脚本。另外vim的:sh
命令就可以了。你甚至可以让它变得更奇特,并且source .tcshrc_$subuser
;这样每个人都可以做到。
subuser=nozimica tcsh
您可以通过让 ssh 为您运行来跳过登录时运行的部分。如果您设置了 ssh 密钥身份验证,那么在~/.ssh/authorized_keys
服务器上,您可以在密钥前加上 前缀command="subuser=nozimica tcsh"
,然后 ssh 将为您运行该命令。
答案2
您可以使用 SSH 从本地计算机发送环境变量。
例如,将export FOO_USER="$USER"
(在tcsh
的版本中.bash_profile
) 或FOO_USER=joe ssh remote-host
(在命令行上) 放在本地计算机上。编辑您的内容~/.ssh/config
以包括以下内容:SendEnv LANG LC_* FOO_USER
.
.bash_profile
然后,在远程服务器上,您可以检查(或您在)中的变量tcsh
,并执行适当的操作:
if [ "$FOO_USER" = 'joe' ]; then
export PS1='--[ Joe rules ]-- \u@\h \w \$ ';
source tcsh.joe;
elif [ "$FOO_USER" = 'jane' ]; then
alias ll='ls -Al';
fi
默认情况下,SSH 服务器仅接受LANG
和LC_*
,因此如果您无法/etc/ssh/sshd_config
在服务器上编辑以添加AccceptEnv LANG LC_* FOO_USER
,您可以通过滥用变量来破解它LC_*
,例如LC_FOO_USER=joe
。相应地更新您的.bash_profile
s (或者更确切地说,相应的本地和远程tcsh
文件)。
答案3
我和我的团队在共享帐户方面也遇到过类似的问题。我们提出了基本相同的解决方案,只是稍微优化了一下。
这就是我们所做的。 (我们使用ksh
,我不太了解,tcsh
但我认为它非常相似)。
精简
.tcshrc
到最低限度,以至于几乎无法再使用。强制每个用户使用
.tcshrc_cust
并在原文中tcshrc
添加类似的内容:
alias u1='source .tcshrc_user1'
alias u2='source .tcshrc_user2'
alias u3='source .tcshrc_user3'
这个想法是,只输入 2 个字母比输入整个命令更方便。此外,如果整个团队都这样做,它就会变得更容易被采用并且更容易维护。
我并不是说这是一个完美的解决方案,而且我一直在寻找与您相同的东西一段时间了,这是我能想到的最好的解决方案。让我们希望其他人有更好的主意:)