Запустить команду с помощью args несколько раз [duplicate]

Открыв окно ошибки (связанное с некоторым дефектным разрешением экрана), я вызвал эту проблему. Простое закрытие проблемы решило проблему.

Странная часть заключалась в том, что это не было диалоговое окно экрана печати. ​​

3
задан 12 June 2017 в 18:00

6 ответов

Команда

xargs, созданная для запуска команды с аргументами, которые считываются из stdin, имеет параметр --arg-file, который позволяет считывать аргументы из файла. В сочетании с флагом -L1 он будет читать ваши файлы аргументов за строкой, а для каждой строки выполнить команду. Вот пример:

$ cat args.txt
one two three
four file six

$ xargs -L1 --arg-file=args.txt echo                       
one two three
four file six

Замените echo на свой скрипт.

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

$ xargs -L1  echo < args.txt                                                                                             
one two three
four file six
6
ответ дан 22 May 2018 в 21:37
Команда

xargs, созданная для запуска команды с аргументами, которые считываются из stdin, имеет параметр --arg-file, который позволяет считывать аргументы из файла. В сочетании с флагом -L1 он будет читать ваши файлы аргументов за строкой, а для каждой строки выполнить команду. Вот пример:

$ cat args.txt one two three four file six $ xargs -L1 --arg-file=args.txt echo one two three four file six

Замените echo на свой скрипт.

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

$ xargs -L1 echo < args.txt one two three four file six
6
ответ дан 18 July 2018 в 11:46
Команда

xargs, созданная для запуска команды с аргументами, которые считываются из stdin, имеет параметр --arg-file, который позволяет считывать аргументы из файла. В сочетании с флагом -L1 он будет читать ваши файлы аргументов за строкой, а для каждой строки выполнить команду. Вот пример:

$ cat args.txt one two three four file six $ xargs -L1 --arg-file=args.txt echo one two three four file six

Замените echo на свой скрипт.

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

$ xargs -L1 echo < args.txt one two three four file six
6
ответ дан 24 July 2018 в 19:51

Использование цикла while:

#!/bin/bash
while IFS= read -r line; do
   # if the line read is empty 
   # go to the next line. Skips empty lines
   if [ -z "${line}" ]
   then
       continue
   fi
  /path/to/MyScript.sh $line
done < "$1"

Затем вызовите этот скрипт anything.sh и запустите его следующим образом:

anything.sh /path/to/file/with/foo

Не забудьте сделать оба anything.sh и MyScript.sh исполняемый файл

5
ответ дан 22 May 2018 в 21:37
  • 1
    вы можете напрямую отправить файл с параметрами в цикл: done < params_file – RoVo 12 June 2017 в 15:13
  • 2
    Да, я знаю, но я предпочитаю это, так что OP может изменить поданный файл по желанию – George Udosen 12 June 2017 в 15:15
  • 3
    Ваш цикл for не будет читать файл по строкам. Измените его на (IFS=$'\n'; for line in $(cat args.txt); do script.sh "$line"; done). В общем, это не лучший подход. Цикл while предпочтительнее – Sergiy Kolodyazhnyy 12 June 2017 в 15:29
  • 4
    [[ -n "$line" ]] && ./MyScript.sh $line будет короче, 1 вместо 5 строк – RoVo 12 June 2017 в 15:36
  • 5
    @RoVo Также гораздо более неясным. Иногда несколько дополнительных строк являются отличным компромиссом, когда результат гораздо читабельнее , особенно для новичков. – Michael Kjörling 12 June 2017 в 17:48

Использование цикла while:

#!/bin/bash while IFS= read -r line; do # if the line read is empty # go to the next line. Skips empty lines if [ -z "${line}" ] then continue fi /path/to/MyScript.sh $line done < "$1"

Затем вызовите этот скрипт anything.sh и запустите его следующим образом:

anything.sh /path/to/file/with/foo

Не забудьте сделать оба anything.sh и MyScript.sh исполняемый файл

5
ответ дан 18 July 2018 в 11:46

Использование цикла while:

#!/bin/bash while IFS= read -r line; do # if the line read is empty # go to the next line. Skips empty lines if [ -z "${line}" ] then continue fi /path/to/MyScript.sh $line done < "$1"

Затем вызовите этот скрипт anything.sh и запустите его следующим образом:

anything.sh /path/to/file/with/foo

Не забудьте сделать оба anything.sh и MyScript.sh исполняемый файл

5
ответ дан 24 July 2018 в 19:51
  • 1
    вы можете напрямую отправить файл с параметрами в цикл: done < params_file – RoVo 12 June 2017 в 15:13
  • 2
    Да, я знаю, но я предпочитаю это, так что OP может изменить поданный файл по желанию – George Udosen 12 June 2017 в 15:15
  • 3
    Ваш цикл for не будет читать файл по строкам. Измените его на (IFS=$'\n'; for line in $(cat args.txt); do script.sh "$line"; done). В общем, это не лучший подход. Цикл while предпочтительнее – Sergiy Kolodyazhnyy 12 June 2017 в 15:29
  • 4
    @RoVo Также гораздо более неясным. Иногда несколько дополнительных строк являются отличным компромиссом, когда результат гораздо читабельнее , особенно для новичков. – Michael Kjörling 12 June 2017 в 17:48

Другие вопросы по тегам:

Похожие вопросы: