Переменные 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, каждый из них наследует среду вызывающей оболочки. Однако они не разделяют каких-либо изменений в окружающей среде друг с другом.

  • Выполнить строки вывода команд в качестве другой команды в Linux
  • Список файлов с меткой времени с эпохи
  • Как мне перебирать строки в STDIN и запускать команду оболочки?
  • Предложение xargs grep
  • Добавить суффикс ко всем файлам без определенного расширения и сохранить расширение файла
  • Как процитировать аргументы с помощью xargs
  • Запись zsh и вывод на другую команду
  • Где «xargs» добавляет опцию из STDIN?
  • Отправка списка вакансий в slurm
  • Как рекурсивно бок о бок diff каталоги с номерами строк в diff в unix?
  • Почему параметр xargs -i устарел?
  • Linux и Unix - лучшая ОС в мире.