1

Я пытаюсь запустить несколько команд rsync из bash-скрипта, но запускается только первая. Я пытался связать команды с && и ; но ни одна из них не работает

#! /bin/bash
rsync -ahPr --delete-excluded --exclude='.DS_Store' --exclude=Caches/ --ignore-errors --stats --log-file=$LOGFILE --files-from=$FILESFROM ~/$SOURCE /Volumes/$DEST &&
rsync -avh --progress ~/.profile /Volumes/$DEST/_profile/profile &&
rsync -avh --progress ~/.gitconfig /Volumes/$DEST/_profile/gitconfig &&
rsync -avh --progress ~/.ssh/ /Volumes/$DEST/_profile/ssh/ &&
rsync -avh --progress ~/.vim/ /Volumes/$DEST/_profile/vim/

Я делаю последние 4 команды как отдельные, потому что я переименовываю файлы / каталоги на лету - не уверен, есть ли лучший способ сделать это?

Я выполняю скрипт с помощью bash -x myscript.sh чтобы увидеть, нет ли ошибок, но нет.

1 ответ1

3

Бег

rsync && rsync

запустит второй rsync после завершения первого. Ты хочешь

rsync&

Объяснение:

a && b

a бежит, b бежит следующим, только если успешно конкурирует

a || b

a запускается, b запускается следующим, только если a завершается неудачно

a; b

а бежит, б бежит дальше независимо от успеха

a& b

работает, отправляется на задний план. Это эквивалентно запуску a, вводу ctrl-Z и запуску bg

Поэтому, если вы хотите, чтобы ваши программы запускались одновременно, замените && s на одиночный &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .