当我使用 cat 捕获远程 SSH 调用的输出时,无论是在 bash 中还是在 Python 中,一切都按预期工作。
例如,这工作得很好:
import subprocess
rc = subprocess.getoutput(“ssh user@host; cat /proc/meminfo”)
print(rc)
>> MemTotal: 2048212 kB
MemFree: 202168 kB
MemAvailable: 1578308 kB
Buffers: 240876 kB
Cached: 1073456 kB
SwapCached: 0 kB
Active: 1049444 kB
…etc
但是,这不会产生任何结果:
import subprocess
rc = subprocess.getoutput(“ssh user@host; echo $SHELL”)
>>
即使以同一用户身份通过 SSH 连接到机器并输入“echo $SHELL”也可以正常工作并输出到标准输出。
我在这里想念什么?
在我的笔记中,我有以下评论:
如果要使任何本地环境变量可用于 shell 脚本,请使用 exec 命令启动脚本。
直接从命令提示符运行脚本会为脚本生成一个新的子 shell,从而使脚本无法使用 shell 中的任何本地环境变量。
我是否需要使用 'exec' 让这些环境变量可从远程命令执行中使用?
请注意,这不仅仅是一个 Python 问题或一个 RHEL8 问题;它可以在其他 Linux 变体上重现,包括 Ununtu。
谢谢。