在 bash 脚本中传递命令行参数

在 bash 脚本中传递命令行参数

我正在尝试从文本文件中检索一行,将其写入本地文件,然后将其与 IP 列表合并到一个新文件中。但是,我认为我在转义所有参数时遇到了问题,因为它只执行主机列表的第一行。

以下是我目前所掌握的信息:

#!/bin/bash

file="~/hosts"

while IFS= read -r server; do
ssh -t name@$server  "sudo awk -F '=' 'FNR == 2 {print \$2}' /etc/version.txt > ~/version"
done < "$file"
paste ~/hosts ~/version > ~/ip_and_version

答案1

  1. ~不会在引号内展开。您可以使用file=~/"hosts"file="$HOME/hosts"
  2. ssh会吞噬 stdin:这是你的主要问题。ssh -t ... < /dev/null
  3. 请注意你正在写入版本文件在远程服务器上,而不是本地计算机上您自己的主目录。您想要这个吗?

    ssh -t "name@$server" "sudo awk -F= 'FNR == 2 {print \$2}' /etc/version.txt" < /dev/null > ~/version
    

怎么样:

remote_command="sudo awk -F '=' 'FNR == 2 {print \$2}' /etc/version.txt"

readarray -t servers < ~/hosts
for server in "${servers[@]}"; do
    ssh -t name@$server "$remote_command"
done > ~/version

paste ~/hosts ~/version > ~/ip_and_version

相关内容