Значение переменной не распознается после использования gnu parallel?

У меня есть сценарий ниже оболочки, из которого я пытаюсь скопировать 5 файлов параллельно. Я запускаю свой ниже сценарий оболочки на machineA который пытается скопировать файл с machineB и machineC.

Если файла нет в machineB , то он должен быть там в machineC .

Я использую GNU Parallel для загрузки пяти файлов параллельно.

 #!/bin/bash readonly PRIMARY=/tech01/primary readonly FILERS_LOCATION=(machineB machineC) readonly MEMORY_MAPPED_LOCATION=/techbat/data/be_t1_snapshot PRIMARY_PARTITION=(550 274 2 546 278 6 558 282 10 554 286 14) # this will have more file numbers dir1=/techbat/data/be_t1_snapshot/20140501 find "$PRIMARY" -mindepth 1 -delete do_copy() { el=$1 scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@${FILERS_LOCATION[1]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. } export -f do_copy parallel -j 5 do_copy ::: "${PRIMARY_PARTITION[@]}" 

Постановка задачи:-

Проблема, с которой я столкнулся с вышеприведенным сценарием: – Он не может распознать ${FILERS_LOCATION[0]} , ${FILERS_LOCATION[1]} , $dir1 и $PRIMARY внутри do_copy ? И я не уверен, почему?

Если я попытаюсь распечатать этот метод внутри do_copy ничего не распечатывается?

  echo ${FILERS_LOCATION[0]} echo ${FILERS_LOCATION[1]} 

Но если я распечатываю то же самое чуть выше метода do_copy , тогда он отлично работает?

Что-нибудь мне здесь не хватает?

Обновить:-

Ниже приведен код, который я использую –

 #!/bin/bash export PRIMARY=/tech01/primary export FILERS_LOCATION=(machineB machineC) export MEMORY_MAPPED_LOCATION=/techbat/data/be_t1_snapshot PRIMARY_PARTITION=(0 548 272 4 544 276 8 556 280) export dir1=/techbat/data/be_t1_snapshot/20140501 find "$PRIMARY" -mindepth 1 -delete do_copy() { el=$1 scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@${FILERS_LOCATION[1]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. } export -f do_copy parallel -j 8 do_copy ::: "${PRIMARY_PARTITION[@]}" 

Другое обновление: –

Это то, что я получил после запуска ниже сценария –

 #!/bin/bash export PRIMARY=/tech01/primary export FILERS_LOCATION=(slc4b03c-407d.stratus.slc.ebay.com chd1b02c-0db8.stratus.phx.ebay.com) export MEMORY_MAPPED_LOCATION=/techbat/data/be_t1_snapshot PRIMARY_PARTITION=(0 548 272 4 544) export dir1=/techbat/data/be_t1_snapshot/20140501 find "$PRIMARY" -mindepth 1 -delete echo ${FILERS_LOCATION[0]} echo ${FILERS_LOCATION[1]} do_copy() { el=$1 echo "scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 bullseye@${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 bullseye@${FILERS_LOCATION[1]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/." } export -f do_copy parallel -j 3 do_copy ::: "${PRIMARY_PARTITION[@]}" 

Результат, который я получил –

 david@tvxdbx1143:/home/david$ ./scp_files5.sh machineB machineC When using programs that use GNU Parallel to process data for publication please cite: O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ;login: The USENIX Magazine, February 2011:42-47. This helps funding further development; and it won't cost you a cent. To silence this citation notice run 'parallel --bibtex' once or use '--no-notice'. scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_0_200003_5.data /tech01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_0_200003_5.data /tech01/primary/. scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_548_200003_5.data /tech01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_548_200003_5.data /tech01/primary/. scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_272_200003_5.data /tech01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_272_200003_5.data /tech01/primary/. scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_4_200003_5.data /tech01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_4_200003_5.data /tech01/primary/. scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_544_200003_5.data /tech01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@:/techbat/data/be_t1_snapshot/20140501/t1_weekly_1680_544_200003_5.data /tech01/primary/. 

  • Параллельно с GNU Parallel реализовано в ksh?
  • Как получить GNU параллельно на Amazon Linux?
  • Две команды GNU Parallel, выполненные на одном компьютере
  • Приостановка в GNU параллельной и ожидающей символа
  • Найти | параллельный выполнение скрипта с помощью пути от find + другие аргументы
  • Как читать результат с первого шага параллели?
  • GNU parallel - два параметра из массива в качестве параметра
  • Параллельный rsync с использованием GNU Parallel
  • 2 Solutions collect form web for “Значение переменной не распознается после использования gnu parallel?”

    Попробуйте экспортировать их и удалить массив, поскольку bash не может экспортировать массивы :

     export PRIMARY=/data01/primary export FILERS_LOCATION_1=machineB export FILERS_LOCATION_2=machineC export MEMORY_MAPPED_LOCATION=/bexbat/data/be_t1_snapshot export dir1=/bexbat/data/be_t1_snapshot/20140501 

    Или просто поместите все постоянные переменные в функцию:

     #!/bin/bash PRIMARY_PARTITION=(0 548 272 4 544 276 8 556 280) PRIMARY=/data01/primary find "$PRIMARY" -mindepth 1 -delete do_copy() { el=$1 PRIMARY=/data01/primary FILERS_LOCATION=(machineB machineC) MEMORY_MAPPED_LOCATION=/bexbat/data/be_t1_snapshot dir1=/bexbat/data/be_t1_snapshot/20140501 scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@${FILERS_LOCATION[0]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@${FILERS_LOCATION[1]}:$dir1/t1_weekly_1680_"$el"_200003_5.data $PRIMARY/. } export -f do_copy parallel -j 8 do_copy ::: "${PRIMARY_PARTITION[@]}" 

    В зависимости от того, какие файлы вы копируете, вы должны заглянуть в rsync -z вместо scp . И рассмотрите возможность запуска parallel --bibtex один раз (как это предлагается параллельно).

    Вы экспортировали функцию, но не переменные, которые вы пытаетесь использовать непосредственно в функции.

    parallel запускает новую оболочку для каждого запуска do_copy и в этой оболочке переменные интерпретируются и не существуют.

    Если используется опция -s SERVER опция --env VAR будет копировать VAR из начальной parallel оболочки в удаленную среду, в которой выполняется команда:

     parallel -j 5 -S localhost --env do_copy --env PRIMARY --env FILERS_LOCATION do_copy ::: "${PRIMARY_PARTITION[@]}" 

    Вы можете уйти с вышеуказанным хостингом localhost, так как я не вижу простой способ реализовать вашу логику нескольких серверов в параметрах параллельного сервера -S (если только вам не гарантированно, что на одном сервере не будет файла?)

    Лучше всего было бы экспортировать переменные, как предлагал Оле, или передать все do_copy значения в качестве параметров функции do_copy

    Interesting Posts

    ssh-agent: как сохранить ключ входа и добавить больше идентификаторов?

    Как перенести базу данных доверия GPG с одной машины на другую?

    Внутренний микрофон не работает на Dell Vostro 3360

    Сценарий для отправки оповещения по электронной почте только при изменении процесса

    Отслеживать исходящие веб-запросы, поскольку они происходят

    Отключить печать кодов в urxvt

    Проблемы с Dell Wireless 5570 HSPA + Мобильная широкополосная карта

    Неправильно / опасно / неуместно помещать произвольные резервные копии в / var / backups?

    Невозможно использовать scp для Solaris

    Запись «grub» в BIOS после установки ElementaryOS

    sed – как сделать несколько последовательных замещений, но обрабатывать файл только один раз?

    ffmpeg output.mp4 с размером 0

    Что такое команда для проверки версии Java ME, которую я установил?

    wpa_supplicant кошмары

    Может ли interupt обрабатываться программным обеспечением без поддержки оборудования?

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