У меня есть следующий раздел в моем скрипте bash:
# Move to script's source directory (in case it's being called from somewhere else)
cd $(dirname "${BASH_SOURCE[0]}")
# Save script's source directory
pwd=$(pwd)
# If it's not already ~/.cfg
if [ ! "$pwd" -ef ~/.cfg ]; then
echo "Renaming directory"
# Move up one level (since you can't rename directory while in it)
cd ..
# And rename it
mv "$pwd" ~/.cfg
fi
Этот скрипт является установочным скриптом для репозитория git, который запускается сразу после его клонирования. Идея состоит в том, чтобы переместить весь репозиторий в ~/.cfg
. Однако я получаю сообщение об ошибке
mv: невозможно переместить '/home/user/config' в '/home/user/.cfg': разрешение запрещено
Разрешения установлены соответствующим образом, и вызов того же mv
из командной строки работает без проблем.
Я предполагаю, что проблема в том, что я переименовываю каталог, в то время как сценарий внутри него все еще работает, и просто выйти из него с помощью cd
(как в приведенном выше фрагменте) недостаточно. Есть ли способ обойти это?
В конце концов оказалось, что я могу сделать что-то попроще, чем принятый ответ ниже, хотя в том же духе, что и удаление в самом конце.
Я просто изменил команду mv
на cp -r
, затем добавил rm -rf "$pwd"
в самом конце скрипта. Очевидно , флаг rm
-f
«s игнорирует тот факт , что скрипт работает. Скрипт теперь работает как задумано.