对于同一个unix或linux用户,不同的环境变量集

对于同一个unix或linux用户,不同的环境变量集

我正在使用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 服务器仅接受LANGLC_*,因此如果您无法/etc/ssh/sshd_config在服务器上编辑以添加AccceptEnv LANG LC_* FOO_USER,您可以通过滥用变量来破解它LC_*,例如LC_FOO_USER=joe。相应地更新您的.bash_profiles (或者更确切地说,相应的本地和远程tcsh文件)。

答案3

我和我的团队在共享帐户方面也遇到过类似的问题。我们提出了基本相同的解决方案,只是稍微优化了一下。

这就是我们所做的。 (我们使用ksh,我不太了解,tcsh但我认为它非常相似)。

  • 精简.tcshrc到最低限度,以至于几乎无法再使用。

  • 强制每个用户使用.tcshrc_cust

并在原文中tcshrc添加类似的内容:

 alias u1='source .tcshrc_user1'
 alias u2='source .tcshrc_user2'
 alias u3='source .tcshrc_user3'

这个想法是,只输入 2 个字母比输入整个命令更方便。此外,如果整个团队都这样做,它就会变得更容易被采用并且更容易维护。

我并不是说这是一个完美的解决方案,而且我一直在寻找与您相同的东西一段时间了,这是我能想到的最好的解决方案。让我们希望其他人有更好的主意:)

相关内容