В ~/.bashrc
вы можете добавить что-то подобное, чтобы включить автозаполнение для вашегоscript.sh
:
complete -f -X '!*.ly' script.sh
Параметр -f
определяет имена файлов, а -X
— это шаблон фильтра (обратите внимание, что шаблон фильтра удаляет значения, соответствующие шаблону, поэтому !
используется для отмены шаблона таким образом, что все имена файлов, кроме *.ly
удаляются.
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
)