Я пытаюсь запустить ряд команд параллельно через xargs
. Я создал пустой список разделенных команд в файле cmd_list.txt
, а затем попытался запустить их параллельно с 6 нитей следующим образом:Ошибка wget и bash: bash: строка 0: fg: нет управления заданиями
cat cmd_list.txt | xargs -0 -P 6 -I % bash -c %
Однако, я получаю следующее сообщение об ошибке:
bash: line 0: fg: no job control
I 'сузилась проблема, связанная с длиной отдельных команд в списке команд. Вот пример искусственно длинную команду для загрузки изображения:
mkdir a-very-long-folder-de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8
wget --no-check-certificate --no-verbose -O a-very-long-folder-de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8/blah.jpg http://d4u3lqifjlxra.cloudfront.net/uploads/example/file/48/accordion.jpg
Просто работает в wget
команду на себе, без списка файлов и без xargs
, работает отлично. Однако выполнение этой команды в командной Баш строке (опять же, без списка файлов) не с no job control error
:
echo "wget --no-check-certificate --no-verbose -O a-very-long-folder-de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8/blah.jpg http://d4u3lqifjlxra.cloudfront.net/uploads/example/file/48/accordion.jpg" | xargs -I % bash -c %
Если я выхожу из длинного имени папки и, следовательно, сократить команду, она отлично работает:
echo "wget --no-check-certificate --no-verbose -O /tmp/blah.jpg http://d4u3lqifjlxra.cloudfront.net/uploads/example/file/48/accordion.jpg" | xargs -I % bash -c %
xargs
имеет параметр -s
(размер), который может изменить размер макс длины командной строки, но я пытался увеличить его до абсурдных размеров (например, 16000), без какого-либо эффекта. Я думал, что проблема может быть связана с длиной строки, передаваемой в bash -c
, но следующая команда также работает без проблем:
bash -c "wget --no-check-certificate --no-verbose -O a-very-long-folder-de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8/blah.jpg http://d4u3lqifjlxra.cloudfront.net/uploads/example/file/48/accordion.jpg"
Я понимаю, что есть и другие варианты для запуска команд параллельно, например как parallel
(https://stackoverflow.com/a/6497852/1410871), но я все еще очень заинтересован в исправлении моей установки или, по крайней мере, выяснении, где это происходит.
Я нахожусь в Mac OS X 10.10.1 (Yosemite).
Эта точная пара линий не подходит для вас? Он работает здесь, в CentOS. Если это единственная пара строк в файле, она все равно терпит неудачу с xargs? Сбой (когда он сам по себе), если вы запустите 'bash -c '$ (
@EtanReisner, хотя моя цель - использовать список файлов, у меня есть ошибки еще до этого шага. Эта строка не работает: 'echo 'wget --no-check-certificate --no-verbose -O a-very-long-folder-de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8de090952623b4865c2c34bd6330f8a423ed05ed8/blah.jpg http://d4u3lqifjlxra.cloudfront.net/uploads/example/file /48/accordion.jpg "| xargs -I% bash -c% ' –
@EtanReisner: Re:« Эта точная пара строк терпит неудачу для вас? [...] Если это единственная пара строк в файле, она все равно терпит неудачу с xargs? »: I подумайте, что у вас есть это в обратном направлении. Кажется, что OP говорит, что он * только * терпит неудачу при запуске через xargs. – ruakh