У меня есть сценарий Bash, который принимает входную папку с исходным кодом и выходной каталог в качестве аргументов. Я хочу иметь возможность компилировать файлы в исходной папке, а затем отправлять их в папку вывода. Проблема в том, что xargs
добавляет исходные файлы чтения в конец аргумента, где я бы хотел, чтобы вместо этого была добавлена папка вывода. Как я могу контролировать размещение аргументов xargs
? Это то, что я хочу сделать: find $source -name '*.c' | xargs gcc <files> $output
Как управлять размещением параметров xargs?
0
A
ответ
2
Это может быть достигнуто с помощью:
find $source -name '*.c' | xargs gcc -o $output
Это указывает выход gcc
, прежде чем дать ему список исходных файлов.
Эта проблема не может быть решена путем изменения расположения аргумента xargs, как будто вы делаете:
find $source -name '*.c' | xargs -I source gcc source -o $output
Что будет работать, если вы получите source/a.c
и source/b.c
вернулся из find
является:
gcc source/a.c -o $output
gcc source/b.c -o $output
Который я не верю, это результат, который вы после.
0
Использование GNU Parallel:
find $source -name '*.c' | parallel gcc {} -o $output/{.}
Или, если вы хотите, чтобы все файлы в {}:
find $source -name '*.c' | parallel -Xj1 gcc {} -o $output
Узнайте больше о GNU Parallel: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
10 второй установки:
wget pi.dk/3 -qO - | sh -x
0
Эта задача может быть решена с использованием только Bash:
#!/bin/sh
if [ $# -ne 2 ]; then
echo "usage: $0 [srcdir] [bindir]"
exit 1
fi
src_dir="${1%/}"
bin_dir="${2%/}"
for src in "$src_dir"/*.c; do
bin="$(basename "${src%.c}")"
gcc "$src" -o "$bin_dir/$bin"
done
возможный дубликат [Использование xargs команды и две команды на перемещение после него] (http://stackoverflow.com/questions/11429234/using-xargs-command- и-два-перемещение-команд следования-его) – fedorqui