如何将两个文件中的参数传递给命令?

如何将两个文件中的参数传递给命令?

我正在尝试将 50 台打印机的设置从一台服务器复制到另一台服务器。命令:

lpadmin -p printer_name -v printer_ip -E和一些更多的参数。

我将打印机名称放在一个文本文件中,将打印机 IP 放在另一个文本文件中。

Printername.txt 在单独的行中包含打印机名称

Printerip.txt 在不同的行中包含相同打印机的 IP

我想将这两个文件中的打印机名称和打印机 IP 作为参数传递给上述命令。

我知道如何对 1 个参数执行此操作,即通过在 cat 文件中使用 For i 来执行此操作,但我无法用两个文件执行此操作。

答案1

您可以使用粘贴从每个文件中各取一行:

paste Printername.txt Printerip.txt

然后使用awk在其中插入选项参数:

paste Printername.txt Printerip.txt | awk '{print "-p", $1, "-v", $2, "-E ..."}'

最后xargs使用它作为命令的参数:

paste Printername.txt Printerip.txt | awk '{print "-p", $1, "-v", $2, "-E ..."}' | 
  xargs -L1 lpadmin

-L1让我们xargs为每次运行命令使用一行输入。它将进行一些分割,因此-p,打印机名称等作为单独的参数传递。这最适合打印机名称中不包含空格或其他特殊字符的情况。

或者,您可以使用shwithxargs将输入定位为参数:

paste -d '\n' Printername.txt Printerip.txt | xargs -d '\n' -n2 sh -c 'lpadmin -p "$1" -v "$2" -E ...' _

答案2

您可以使用join连接这两个文件。那么也许xargs,或者for i in …

相关内容