我尝试执行以下两个文件,但在 echo "$application" 时出现问题。我没有看到任何输出。我如何通过 ssh 传递变量并使用该变量执行一些命令。它能够成功获取主机名并 ssh 到服务器,但应用程序没有传递给 ssh 内的命令。
ssh测试脚本
#!/bin/bash
execommand(){
ssh ${hostname} "application=$app1" <<'EOL'
echo "$application"
cd /opts/logs/${application}
EOL
}
source input.txt
execommand
输入.txt
#!/bin/bash
hostname="host1.server.com"
app1="home_loan"
export hostname
export app1
答案1
添加bash
到初始命令的末尾;ssh_test.sh 应该如下所示:
#!/bin/bash
execommand(){
ssh ${hostname} "application=$app1 bash" <<'EOL'
echo "$application"
cd /opts/logs/${application}
EOL
}
source input.txt
execommand
这样你的命令才会被 shell 真正处理。之前 shell 甚至不会接收这些命令。
如果您希望禁用Pseudo-terminal will not be allocated because stdin is not a terminal.
将看到的警告,您可以将标志添加-T
到 ssh 命令,并按如下方式修改它:
ssh -T ${hostname} "application=$app1 bash" <<'EOL'