【问题标题】:Use remote server env variable in ksh via an SSH command通过 SSH 命令在 ksh 中使用远程服务器环境变量
【发布时间】:2015-03-07 20:15:23
【问题描述】:

我找不到这个“看起来很简单”的问题的任何答案。

我想使用 ksh shell 或使用 SERVER 环境变量的脚本执行 ssh 命令。

示例: ssh user@server "ls $DIR"

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

在最坏的情况下,我可以使用类似 env | grep 目录 |剪切 -d "=" -f 2 获取 var 但它看起来很奇怪。

感谢您的帮助。

【问题讨论】:

    标签: unix ssh ksh env


    【解决方案1】:
    ssh user@server "ls $DIR"
    

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

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

    ssh user@server 'ls $DIR'
    

    【讨论】:

      【解决方案2】:

      SSH 命令执行 shell 是 non-interactive shell,而您的普通 shell 是 login shell 或 interactive shell。

      事实上并非所有的环境变量都可以在非交互式shell中使用,您需要查看ksh手册以找出kshnon-interactive模式下运行时读取的配置文件,以防bash那些大致跟随

      /etc/profile
      ~/.bash_profile
      ~/.bash_login
      ~/.profile
      

      只需找出ksh 的对应变量,然后将您的DIR 环境变量定义移动/复制到服务器端。

      【讨论】:

      • 感谢您的澄清。我的 .profile 中有我的变量,由服务器端的 ksh 使用。但是 ssh 仍然使用存在客户端的变量的定义(DIR 在两个环境中定义为不同的值)。如何让 ssh 明白我要使用服务器的定义?
      • 好的,我现在很好。通过在 ssh 会话开始时启动我的 .profile 并使用 Kenster 回答语法,我现在正在使用我的远程变量。
      猜你喜欢
      • 2017-10-02
      • 1970-01-01
      • 2011-02-15
      • 2013-11-22
      • 2020-10-30
      • 2013-05-04
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多