対話型プロンプトに応答して実行中のbashスクリプトを実行する

対話型プロンプトに応答して実行中のbashスクリプトを実行する

対話型プロンプトでシェルスクリプトを実行する際には、いくつかの問題があります。完全なコードがうまく動作します。 bashスクリプトをecho 'hello world'行に置き換えると、問題なくうまく機能します。私は長い間シェルユーザーエクスペリエンスがないので、説明と答えてくれてありがとう。

したがって、基本的に私が望むのは、データバックアップを開始するために別のスクリプトを実行するかどうかを尋ねるインタラクティブシェルスクリプトを使用することです。

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"

おすすめ記事