Unix 通过SSH命令在ksh中使用远程服务器env变量

Unix 通过SSH命令在ksh中使用远程服务器env变量,unix,ssh,ksh,env,Unix,Ssh,Ksh,Env,我找不到这个“看起来容易”的问题的答案 我想使用ksh shell或脚本执行ssh命令,该脚本使用服务器的env变量 例如: sshuser@server“ls$DIR” 其中,$DIR是服务器上定义的环境变量(在本例中为目录路径),而不是客户端环境上定义的$DIR 在最坏的情况下,我可以使用像env | grep DIR | cut-d“=”-f2这样的东西 获取var,但它看起来很奇怪 感谢您的帮助。SSH命令执行shell是一个非交互式的shell,而您的普通shell是一个登录的shel

我找不到这个“看起来容易”的问题的答案

我想使用ksh shell或脚本执行ssh命令,该脚本使用服务器的env变量

例如: sshuser@server“ls$DIR”

其中,$DIR是服务器上定义的环境变量(在本例中为目录路径),而不是客户端环境上定义的$DIR

在最坏的情况下,我可以使用像env | grep DIR | cut-d“=”-f2这样的东西 获取var,但它看起来很奇怪


感谢您的帮助。

SSH命令执行shell是一个非交互式的shell,而您的普通shell是一个登录的shell或交互式的shell

事实上,并非所有的环境变量都可以在非交互式shell中使用,您需要检查
ksh
手册,以确定
ksh
非交互式
模式下运行时读取的配置文件,在
bash
的情况下,这些配置文件大致如下

/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
只需找出
ksh
对应的变量,然后将
DIR
环境变量定义移动/复制到服务器端的相应位置

ssh user@server "ls $DIR"
双引号字符串进行变量插值。因此,在本地系统上替换“$DIR”,然后shell使用生成的字符串调用ssh命令

要将文字命令传递到远程系统,请使用单引号:

ssh user@server 'ls $DIR'

谢谢你的澄清。我的.profile中有我的变量,ksh在服务器端使用。但是ssh仍然使用变量present client-side的定义(DIR在两个环境中都是用不同的值定义的)。如何让ssh理解我想要使用服务器的定义?好的,我现在很好。通过在ssh会话开始时启动my.profile并使用Kenster应答语法,我现在使用的是我的远程变量。