无法使用 ssh 获取配置文件变量

Kum*_*ohn 2 linux ssh bash environment-variables

无法使用 ssh 检索配置文件变量。

server2 ==> 用户 apptst ==> bash 配置文件有 $APPHOME 变量。

试图使用 ssh 从 server1 检索值但失败。

下面使用的选项

server1> ssh apptst@server2 'echo $APPHOME'

server1> ssh apptst@server2 echo '$APPHOME'

server1> ssh apptst@server2 echo "$APPHOME"

server1> ssh apptst@server2 "echo $APPHOME"
Run Code Online (Sandbox Code Playgroud)

尝试时

server1> ssh apptst@server2 ls -ld $APPHOME
Run Code Online (Sandbox Code Playgroud)

它工作正常。

有什么建议缺少什么以及如何从 server2 获取变量?

mpy*_*mpy 5

此命令应该有效:

 server1> ssh apptst@server2 'bash -l -c "echo \$APPHOME"'
Run Code Online (Sandbox Code Playgroud)
  • 您需要'引号将完整的命令作为一个参数传递给 ssh;这也防止了 server1 上的 shell 扩展$APPHOME自身
  • bash -l启动一个登录 shell,它读入配置文件,其中定义了 $APPHOME(正如@chepner在他的回答中指出的那样,这不是由 sshd 调用时的默认设置)
  • -c 执行下一个参数,再次用引号表示完整的 echo 命令被执行。
  • 转义\$是必要的,否则sshd 调用的父(非登录)shell(并且直接从 init (*) 继承环境)确实 expand $APPHOME。但这还为时过早,因为$APPHOME只为登录shell定义(通过~/.profile)。[在OP评论后添加了这一点]

(*) 纠正我,如果我在这里错了。