发出运行 bash 脚本作为对交互式提示的响应

发出运行 bash 脚本作为对交互式提示的响应

我在交互式提示中运行 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".

相关内容