ユーザーにディレクトリを繰り返し入力するように求められます。その後、スクリプトはディレクトリが存在することを確認し、そうでない場合は、ユーザーが有効なディレクトリを入力するまでメッセージを表示し続けます。
私のコード:
#!/bin/bash
while :
do
echo "Enter a directory:"
read directory
if [ -f $directory ]
then
cd $directory
break
else
echo "Directory does not exists, please try again."
fi
done
これで問題は、有効なディレクトリ(/ home / usernameなど)を入力しても、そのディレクトリを変更するのではなく繰り返されることです。何が間違っているのか知っていますか?
答え1
入力したコードを実行したところ、うまくいきましたが、ディレクトリを確認したいので、-fを-dに変更しました。シェルスクリプトを実行するには、source組み込みコマンドを使用する必要があります。
$ source script_name.sh
cdコマンドはサブシェル環境で実行されるため、コマンドが実行されると、ifステートメントでテストされているとおり、$ directoryが有効な場合はディレクトリが変更されます。
子シェル環境が親シェルに制御を返した場合、環境(cd $directory)の変更は親シェルに伝播されません。したがって、同じディレクトリに滞在するだけです。
ソースは現在のシェル自体でスクリプトを実行するので、cd コマンドが正常に実行されると変更が表示されます。