我有一个 bash 脚本,需要连接到另一台服务器才能执行部分操作。我已经尝试了许多用于执行 ssh 命令的标准指令和语法,但进展甚微。
在远程服务器上,我需要获取一个 shell 脚本,其中包含某些软件的多个环境参数。然后,在文件路径中使用这些参数之一来指向可执行文件,该可执行文件包含一个函数“-lprojects”,可以列出该服务器上软件的项目。
我已经验证在服务器本身上运行命令可以多次运行。我的问题是当我尝试通过 SSH 运行相同的命令时。如果我使用将 env 变量用作文件路径的方法,它会显示该变量在文件路径中为空,从而给出文件/目录未找到错误。如果我硬编码文件路径以指向可执行文件,它会给我一个错误,指出 shell 脚本没有来源(我认为它需要其他函数和可执行文件的 api 来显示它的 -lprojects 函数)
代码如下所示:
ssh remote.server 'source /filepath/remotescript.sh'
filelist=$(ssh remote.server $REMOTEVARIABLE'/bin/executable -lprojects')
echo ${filelist[@]}
for file in $filelist
do
echo $file
ssh SERVER2 awk 'something' /filepath/"$file"/somefile.txt | sed 'something' >> filepath/values.csv;
done
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,然后我还需要循环访问remote.server中-lprojects输出的内容,对文件执行一些awk和sed以提取所需的文本(这有效),但随后我需要编写返回客户端(本地服务器)values.csv 文件。这是更通用的,因为我必须为多个服务器执行此操作,但所有服务器都必须写入同一个 .csv 文件。为简单起见,您可以将其视为一个远程服务器案例,因为一开始就让它至少为一个远程服务器工作至关重要。
请注意,我也尝试过类似的操作:
ssh remote.server << EOF
'source /filepath/remotescript.sh'
filelist=$(ssh remote.server $REMOTEVARIABLE'/bin/executable -lprojects')
EOF
Run Code Online (Sandbox Code Playgroud)
但结果相似。还在文件列表中的远程变量之前和之后放置单引号,等等。
我该如何正确地做到这一点?
要访问环境变量,您必须在与您使用该环境变量的同一 SSH 调用中获取定义环境的脚本,否则,您将在两个不相关的不同 shell 中运行命令:
filelist=$(ssh remote.server 'source /filepath/remotescript.sh; $REMOTEVARIABLE/bin/executable -lprojects')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2036 次 |
| 最近记录: |