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 获取变量?
此命令应该有效:
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评论后添加了这一点](*) 纠正我,如果我在这里错了。