コマンドラインのオプションは、内部コマンドであっても、コマンドが実行される前に展開されます。実行に使用しているシェルが何であれ/bin/bash cd ~
、ホーム ディレクトリに展開される特殊文字ではなく、チルダを文字どおりに解釈していると思われます。
テストとして、その名前でディレクトリを作成してみて、エラーが解消されるかどうかを確認してください。
> mkdir ./~
> /bin/bash cd ~
このコマンドは、実行中のシェル内で実行cd
する必要があることに注意してください。サブシェルの作業ディレクトリを変更してからサブシェルを終了すると、開始した場所に戻っていることに気付くでしょう。
更新:
$HOME
bash スクリプト内から、一貫してホーム ディレクトリを含む環境変数を使用できるはずです。どのような条件でチルダ展開が失敗するかはわかりませんが、常に使用してきました$HOME
。
また、特定のディレクトリに変更できるかどうかを判断するときは、明示的で有用なステータスを返すオプションがあります。
unset err
if [[ ! -d "$somedir" ]]; then
err="Can't find $somedir"
elif [[ ! -r "$somedir" ]]; then
err="Can't read $somedir"
fi
if [[ -n "$err" ]]; then
echo "$ERROR: $err" >&2
exit 1
fi
cd "$somedir"
または、CD を試してその結果を確認することもできます。
if ! cd "$somedir"; then
echo "ERROR: $somedir not availble"
exit 1
fi
詳細なエラー レポートは便利ですが、必要ない場合は、コードを小さくしておくことにも利点があります。