Bash команда для кошки нескольких файлов, которые будут использоваться в качестве переменной - PullRequest
0 голосов
/ 19 апреля 2020

Я использую приложение, которое имеет следующий синтаксис:

mccli backup delete --name=X --labelnum=X

Я могу вручную выполнить команду каждый раз, которая будет выглядеть следующим образом:

mccli backup delete --name=server1 --labelnum=12
mccli backup delete --name=server2 --labelnum=33

Проблема в том, что У меня есть 1000 хостов для запуска этой команды. У меня есть файл (name.txt) со списком всех переменных --name= и файл (labelnum.txt) со списком всех переменных --labelnum=.

Я знаком со следующей командой bash, которая работает для одной переменной (--name=), но я не могу понять, чтобы эта команда bash работала с двумя переменными:

for i in $(cat name.txt); do mccli backup delete --name=$i ; done

Это не работает:

for i in $(cat name.txt) for j in $(cat labelnum.txt); do mccli backup delete --name=$i --labelnum=$j ; done

Ответы [ 3 ]

1 голос
/ 19 апреля 2020

Если я вас правильно понял, вы хотите получить значения аргументов --name и --labelnum из соответствующих строк этих двух файлов. Предполагая, что в строках первого файла нет символов табуляции и что файлы имеют одинаковое количество строк:

while IFS=$'\t' read -r name label; do
  mccli backup delete --name="$name" --labelnum="$label"
done < <(paste name.txt labelnum.txt)

должно сделать это.

0 голосов
/ 19 апреля 2020
Команда

cat понимает несколько аргументов и масок файлов, поэтому

for i in $(cat name.txt labels.txt); do mccli backup delete --name=$i ; done

или даже

for i in $(cat *.txt); do mccli backup delete --name=$i ; done

Если файлы содержат только один аргумент в строке, все должно быть в порядке.

0 голосов
/ 19 апреля 2020

Вы можете сделать скрипт bash и сделать два для циклов, по одному для каждого файла. Если вам действительно нужно использовать команду оболочки, а не сценарий оболочки, то вы можете создать вложенные циклы. Такая вещь будет выглядеть примерно так:

для имени файла в "name.txt", "labelnum.txt"; сделать для меня в $ имя файла; сделать резервную копию mccli удалить --name = $ i; сделано сделано

...