Циклический файл для создания других командных файлов - PullRequest
1 голос
/ 22 июня 2019

Я пытаюсь создать скрипт, который будет автоматически регистрировать меня на определенном удаленном устройстве (назовем его fw).«Команда» немного сложна, так как мы выполняем вход с защищенного сетевого сервера, и для входа в систему доступны сотни таких файлов.

Я создал файл с двумя разделенными параметрами (команда и имя)«#», первый параметр - это строка «command» с пробелами (то есть: «sudo --user ....»), которую я хочу поместить (echo) в исполняемый файл с именем «name» (имяустройство, к которому я хочу подключиться).

Моя логика была изначально:

for line in $(awk -F# '{print $1, $2}'  list.txt), do touch $2; && echo "$1 > $2" && chmod +x $2; done

Мой конец должен создать x файлов с именем "$ name", каждый из которых будет содержать только одну строку"$ command" и быть "исполняемым".

Я пробовал несколько вещей, чтобы сделать эту работу.Я могу перебирать файл без особых проблем, используя for, while и даже [[ -n $name ]], но это дает мне только одну переменную и не разбивает строку на две нужные мне "$command"и "$name".Даже $1 и $2 подойдет для моих целей ...

Во время тестирования:

$ while IFS=# read -r line; do echo "$line"; done < list
 sudo --user xxxxxxxxxxxxxx#yyyyyyyyy
 sudo --user xxxxxxxxxxxxxx#yyyyyyyyy
 sudo --user xxxxxxxxxxxxxx#yyyyyyyyy

даже при использовании IFS = # для разделения строки $ - не удаляет"#", как и ожидалось.

for-looping:

$ for line in $(cat list); do echo $line; done
 sudo --user xxxxxxxxxxxxxx
 yyyyyyyyy
  sudo --user xxxxxxxxxxxxxx
 yyyyyyyyy
  sudo --user xxxxxxxxxxxxxx
 yyyyyyyyy

Попытка расширить до:

bin$  for line in $(cat list); do awk -F# '{print $1, $2}'  $line; done
awk: fatal: cannot open file ` xxxxxxxxxxxxxxxxx' for reading (No such file or directory)
awk: fatal: cannot open file `yyyyyyyyy
 sudo --user xxxxxxxxxxxxxxxxx' for reading (No such file or directory)
awk: fatal: cannot open file `yyyyyyyyy
 sudo --user xxxxxxxxxxxxxxxxx' for reading (No such file or directory)

Я хотел бы проанализировать (цикл) черезfile - разделите пармы и создайте $ name с помощью $ command внутри и chmod + x $ name, чтобы получить исполняемый файл, который автоматически зарегистрирует меня на узле "$ name".

1 Ответ

1 голос
/ 23 июня 2019

Я предлагаю вставить всю вашу логику в скрипт awk.

script.awk

BEGIN {FS = "[\r#]"}    # set field separator to # or <CR>
{                   # for each input line
    print $1 > $2;  # write input 1st field to file named 2nd field
    system("chmod a+x "$2); # set file named 2nd field, to be  executable
}

при запуске скрипта:

awk -f script.awk list.txt

input list.txt

 sudo --user xxxxxxxxxxxxxx#yyyyyyyy1
 sudo --user xxxxxxxxxxxxxx#yyyyyyyy2
 sudo --user xxxxxxxxxxxxxx#yyyyyyyy3

вывод:

dudi@DM-840$ ls -l yy*
total 3
-rwxrwxrwx 1 dudi dudi   28 Jun 23 01:21 yyyyyyyy1*
-rwxrwxrwx 1 dudi dudi   28 Jun 23 01:21 yyyyyyyy2*
-rwxrwxrwx 1 dudi dudi   28 Jun 23 01:21 yyyyyyyy3*

обновление:

изменено FS для включения символа <CR>, в противном случае добавляется к именам файлов (рассматривается как * 1022)*).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...