У меня возникают некоторые проблемы с запуском сценария оболочки в интерактивном приглашении. Весь код работает нормально, и если я заменю сценарий bash строкой echo 'hello world', он будет работать без каких-либо проблем. Я не очень давно использую оболочку, поэтому буду признателен за любой ответ, сопровождаемый объяснением.
В основном то, что я пытаюсь сделать, - это заставить интерактивный сценарий оболочки подсказывать мне, хочу ли я запустить другой сценарий, чтобы начать резервное копирование моих данных.
Я попытался запустить основной сценарий (bash my_script.sh) с помощью команды bash и получил следующую ошибку.
main_backup_pend.sh: line 17: bash: command not found
В строке 17 я вызываю сценарий bash, показанный ниже ...
[Yy]* ) echo 'Copying database...'; bash $PATH/backup.database.sh > backup.log.$DATE.database; break;;
#!/bin/bash
PATH=/data/sjamal/4.Backups
DATE=170317
#[COPY]Mysqldump, making database copy storing it locally
while true; do
read -p "Do you wish make a database copy?" yn
case $yn in
[Yy]* ) echo 'Copying database...'; bash $PATH/backup.database.sh > backup.log.$DATE.database; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
#[BACKUP]Performing back up of Repository to HPC
while true; do
read -p "Do you wish to back up Repository to HPC?" yn
case $yn in
[Yy]* ) echo 'backing up Repository...'; bash $PATH/backup.Repository.sh > backup.log.$DATE.repository; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
Первая строка вашего скрипта ломает все:
PATH=/data/sjamal/4.Backups
Это говорит вашему скрипту, что все его команды, включая bash
сам интерпретатор - живут исключительно в этом каталоге. (Возможно, вы не знали, что PATH
- это зарезервированная переменная? Попробуйте когда-нибудь echo $ PATH
, чтобы увидеть список каталогов, в которых обычно выполняется поиск команд.)
Измените свой использование PATH
во всем сценарии для чего-то еще, возможно, backup_dir
, и это с большей вероятностью будет работать, как ожидалось.
Другие подсказки: поместите свои переменные (и пути, использующие переменные) в "$ double_quotes"
, когда вы их используете. Поэтому вместо backup.log. $ DATE.repository
используйте «backup.log. $ DATE.repository»
.