Использование содержимого файла в качестве аргументов командной строки в BASH

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

Скажем, у меня есть следующее:

# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3

Как я могу использовать содержимое каждой строки в файле arglist в качестве аргументов, например, команду cp?

5 ответов

Параметр '-n' для xargs указывает, сколько аргументов используется для каждой команды:

$ xargs -n2 < arglist echo cp
cp src/file1 dst/file1
cp src/file2 dst/file2
cp src/file3 dst/file3


Используя read (это предполагает, что любые пробелы в именах файлов в arglist экранированы):

while read src dst; do cp "$src" "$dst"; done < argslist

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

while read args; do cp $args; done < argslist


Вы можете использовать pipe (|):

cat file | echo

или перенаправление ввода (<)

cat < file

или xargs

xargs sh -c 'emacs "$@" < /dev/tty' emacs

Затем вы можете использовать awk для получения аргументов:

cat file | awk '{ print $1; }'

Надеюсь, что это поможет.


Используйте цикл for с IFS (Внутренний разделитель полей), установленный на new line

OldIFS=$IFS # Save IFS
$IFS=$'\n' # Set IFS to new line
for EachLine in `cat arglist"`; do
Command="cp $Each"
`$Command`;
done
IFS=$OldIFS


если ваша цель - просто скопировать эти файлы в список

$ awk '{cmd="cp "$0;system(cmd)}' file

licensed under cc by-sa 3.0 with attribution.