Переменные ENV по отношению к петлям xargs

Переменные env (с использованием export ) обрабатываются по-разному, когда один и тот же сценарий запускается несколько раз одновременно? Это странный вопрос, поэтому я привел пример, который похож на мою реальную проблему.

hello.sh

 #!/bin/bash export COUNTER=$((COUNTER+1)); echo $COUNTER; sleep 5; /hello.sh 

nums.txt

 1 2 3 4 5 

удар

 # cat /nums.txt | xargs -L 1 -P 5 /hello.sh 

ожидаемый результат

 1 2 3 4 5 (...5 seconds later) 6 7 8 9 10 

фактический результат

 1 1 1 1 1 (... 5 seconds later) 2 2 2 2 2 

Так что запускайте его только один раз, отлично. Но когда я начинаю запускать его несколько раз параллельно, я вижу это поведение. Я предполагаю, что это по какой-то причине, но я не знаю, как это предотвратить.

Чтобы добавить фон, моя цель здесь заключается в том, что когда каждый скрипт заканчивается, он начинает резервное копирование со следующим шагом, считанным из $ COUNTER. Таким образом, я могу установить его, начиная с 5 отдельных потоков, и каждый из них будет постоянно увеличиваться и вызывать скрипт.

One Solution collect form web for “Переменные ENV по отношению к петлям xargs”

Да, вы правы, это похоже на « Как я могу сделать переменные среды« экспортированы »в оболочку скрипта? ».

Если вы определяете переменную как:

 COUNTER=$((COUNTER+1)) 

то он существует только в текущей оболочке. Это не будет видно ни под подоболочками, создаваемыми оболочкой, ни вызывающей оболочкой. При использовании экспорта:

 export COUNTER=$((COUNTER+1)) 

то переменная также видна подоболочками этой оболочки.

Когда вы создаете 5 процессов с xargs, каждый из них наследует среду вызывающей оболочки. Однако они не разделяют каких-либо изменений в окружающей среде друг с другом.

  • Что такое replstrs как {}?
  • команда после команды grep не работает
  • Как декодировать список имен файлов с кодировкой base64?
  • Почему xargs заставляет apt-get прерываться?
  • xargs и <и> в те же файлы
  • почему не xarss правильно разбирает мой вход?
  • Изменение расширения нескольких файлов с помощью однострочной команды
  • Как подключить вывод netcat? Проблемы с xargs и кавычками
  • xargs, записи и стандартный ввод
  • Как использовать `find` для перехода в каталог этого файла
  • создать хеш md5 из рекурсивного списка файлов, когда некоторые пути имеют пробелы
  • Interesting Posts

    Создание постоянного USB с минимальной ОС на os x

    Определение самого длинного времени, затраченного на процесс загрузки

    Как я могу определить, какой IP-адрес используется для подключения к другому компьютеру?

    Не удается войти в localhost через SSH, но аутентификация выполнена успешно

    ACL для пользователя binddn для PAM?

    Как я имею в виду смелый вес семейства шрифтов на смелый вес другого семейства шрифтов?

    Отключить повторную сборку IP-фрагмента в пересылаемых датаграммах

    apt-get update: Как проверить ошибки GPG при использовании скриптов?

    файловая система «/ boot» не является файловой системой системного раздела FAT EFS (ESP)

    Как установить инструменты программирования в корневой каталог, чтобы они могли использоваться пользователями, не являющимися администраторами?

    Как правильно установить Apache, MySQL и PHP на Ubuntu 10.4

    Control-p задерживает сеанс SSH

    Ловушка ctrl c не работает как ожидалось

    Возврат части строки, соответствующей шаблону

    используя команду dd для папки, но удаленные элементы не отображаются удалены

    Linux и Unix - лучшая ОС в мире.