Как запускать команды один за другим в сценарии оболочки с помощью gnu parallel

У меня есть такие команды, как

time parallel -j 40 :::: filetoprocess.sh time parallel -j 40 :::: filetoprocess2.sh

Я хочу запускать эти команды один после другого, т. е. когда time parallel -j 40 :::: filetoprocess.sh finsih then time parallel -j 40 :::: filetoprocess2.sh, но здесь оба запускаются параллельно, я пишу эти команды внутри сценария оболочки файл abc.sh, а затем я запускаю его как nohup sh abc.sh &

, вот что делает m sh creatingcommds.sh 74.9997891 76.1575846 31.6355471 30.6397432 /cats/rallisdata/cropdatazone1/new43REQ 43REQ_20170513 sleep 2 && time parallel -j 40 :::: filetoprocess2.sh && sleep 2 && sh creatingcommds.sh 74.9997891 76.1575846 31.6355471 30.6397432 /cats/rallisdata/cropdatazone1/new43REQ 43REQ_20170523 sleep 2 && time parallel -j 40 :::: filetoprocess3.sh

creatingcommds.sh файл, создающий 80, используется time parallel -j 40 :::: filetoprocess2.sh, но здесь я получаю файл не найденной ошибкой.

0
задан 6 July 2017 в 15:29

2 ответа

Что вам нужно, это &&, как уже упоминал Джордж в комментарии.

& amp; & amp; & amp; означает, что следующая перечисленная команда будет запущена только в том случае, если предыдущая команда вернула значение выхода 0. Вы также можете использовать ||, если вы хотите запустить следующую команду только в том случае, если первая не удалась, или вернула значение, не равное 0.

Итак, для вашего случая это будет:

time parallel -j 40 :::: filetoprocess.sh && time parallel -j 40 :::: filetoprocess2.sh

Это означает, что он будет работать после того, как первая команда будет успешно завершена и не будет запущена, если первая из них не удалась.

Попробуйте

echo test 1 `sleep 2` && echo test 2 `sleep 2` && echo test 3 `sleep 2`
0
ответ дан 18 July 2018 в 10:39

Что вам нужно, это &&, как уже упоминал Джордж в комментарии.

& amp; & amp; & amp; означает, что следующая перечисленная команда будет запущена только в том случае, если предыдущая команда вернула значение выхода 0. Вы также можете использовать ||, если вы хотите запустить следующую команду только в том случае, если первая не удалась, или вернула значение, не равное 0.

Итак, для вашего случая это будет:

time parallel -j 40 :::: filetoprocess.sh && time parallel -j 40 :::: filetoprocess2.sh

Это означает, что он будет работать после того, как первая команда будет успешно завершена и не будет запущена, если первая из них не удалась.

Попробуйте

echo test 1 `sleep 2` && echo test 2 `sleep 2` && echo test 3 `sleep 2`
0
ответ дан 24 July 2018 в 19:37
  • 1
    он будет работать более чем для двух команд – Gaurav Singh 6 July 2017 в 15:09
  • 2
    Да, после каждого & amp; & amp; это означает, что ведущая команда должна быть успешно завершена. Вы можете протестировать его, используя что-то вроде, например, посмотрите на редактирование ... – Ziazis 6 July 2017 в 15:11
  • 3
    не работаю, я добавил дополнительную информацию по моему вопросу, пожалуйста, проверьте ..help me if u can – Gaurav Singh 6 July 2017 в 15:26

Другие вопросы по тегам:

Похожие вопросы: