ユーザー入力に基づいてディレクトリを検証することはできません。

ユーザー入力に基づいてディレクトリを検証することはできません。

ユーザーにディレクトリを繰り返し入力するように求められます。その後、スクリプトはディレクトリが存在することを確認し、そうでない場合は、ユーザーが有効なディレクトリを入力するまでメッセージを表示し続けます。

私のコード:

#!/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 コマンドが正常に実行されると変更が表示されます。

関連情報