Убедитесь, что команда "cp" выполняется правильно

В ~/.bashrcвы можете добавить что-то подобное, чтобы включить автозаполнение для вашегоscript.sh:

complete -f -X '!*.ly' script.sh

Параметр -fопределяет имена файлов, а -X— это шаблон фильтра (обратите внимание, что шаблон фильтра удаляет значения, соответствующие шаблону, поэтому !используется для отмены шаблона таким образом, что все имена файлов, кроме *.lyудаляются.

-1
10.12.2020, 13:53
1 ответ

cpвернется со статусом выхода 0, если ошибок не произошло, в противном случае 1. Так что да, вы можете проверить это значение в сценарии, чтобы решить, не произошло ли ошибок.

Также в настоящее время вы отбрасываете стандартную ошибку команды с 2>/dev/null. Если вы опустите это, любая ошибка будет напечатана на терминале, что является значением по умолчанию для stdoutи stderr. Или вы можете записать stderrв файл журнала с помощью 2>path/to/log/file.


Кроме того, (как Кусалананда уже прокомментировал ), вы можете упростить свою команду, используя -n, --no-clobber, что означает, что не перезаписывается ни один пункт назначения.

cp -Rn origin destination 2>log_file

и сразу после этого, если в скрипт, вы можете проверить $?на успешность.

Или вы можете использовать стандартный ifсинтаксис:

if cp -Rn origin destination 2>log_file; then
    echo "OK"
else
    echo "Failed"
fi

или сокращение:

cp -Rn origin destination 2>log_file && echo "OK" || echo "Failed"

Также-a(вместо-R)кажется полезным для резервного копирования, так как он реализует -Rd, для разыменования ссылок (см.man cp)

1
18.03.2021, 22:43

Теги

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