我在交互式提示中运行 shell 脚本时遇到一些问题。整个代码工作正常,如果我用 echo 'hello world' 行替换 bash 脚本,它就可以正常工作,没有任何问题。我不是一个长期使用 shell 的经验丰富的用户,所以我希望任何带有解释的答案。
所以基本上我想做的是让一个交互式 shell 脚本提示我是否想开始运行另一个脚本来开始备份我的数据。
我尝试使用 bash 命令运行主脚本(bash my_script.sh),但出现以下错误。
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
答案1
脚本的第一行破坏了一切:
PATH=/data/sjamal/4.Backups
这告诉您的脚本,它的所有命令(包括bash
解释器本身)都专门位于此目录中。 (也许您不知道这PATH
是一个保留变量?echo $PATH
有时尝试查看通常搜索命令的目录列表。)
PATH
将整个脚本中对 的使用更改为其他内容,也许backup_dir
它更有可能按预期工作。
其他提示:在使用变量(以及使用变量的路径)时放入"$double_quotes"
它们。所以而不是backup.log.$DATE.repository
使用"backup.log.$DATE.repository"
.