Передача списка значений в скрипт bash

cd /foo
cp -Rp bar subfolder
mv subfolder bar

Это позволяет избежать рекурсивного создания множества каталогов subfolder/subfolderво всех системах Unix путем создания subfolderвместе с barв /foo. Он создает новую папку путем рекурсивного копирования bar. Затем новый каталог перемещается в /foo/bar.

Последовательность команд также могла быть

cd /foo
rsync -a bar/ subfolder
mv subfolder bar
4
06.10.2020, 20:03
1 ответ

Просто:

xargs -l1 <myFile myScript

-l1указывает xargsзапускать myScriptодин раз для каждой1lстроки ввода, при этом слова этой1lстроки передаются как отдельные аргументы.

Для xargsслова разделяются пробелами, и вы можете использовать пробелы (даже новые строки )в словах, используя кавычки. Обратите внимание, однако, что хотя xargsподдерживает "...", '...'и \для цитирования, как и большинство оболочек, его синтаксический анализ отличается от синтаксического анализа Bourne -, подобных оболочкам. В частности, ни в "...", ни в '...'нет обработки обратной косой черты, и только \может экранировать новую строку.

Например,myFileможет содержать:

word1.1 word1.2
"word 2.1" 'word 2.2'
"word'3.1" 'word"3.2'
'word"'"4'1" word\"4\'2
'word '\
5.1 "word "\
5.2

И

xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'

будет производить:

First word: "word1.1", second word: "word1.2"
First word: "word 2.1", second word: "word 2.2"
First word: "word'3.1", second word: "word"3.2"
First word: "word"4'1", second word: "word"4'2"
First word: "word
5.1", second word: "word
5.2"

С реализацией GNU xargsвы можете улучшить его до:

xargs -l1 -r -a myFile myScript

Преимущество этого заключается в том, что стандартный ввод остается в покое и не выполняется myScript, если myFileпуст.

10
18.03.2021, 22:59

Теги

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