cd /tmp
if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
echo "YES"
else
echo "NO"
fi
cd -
はい、次のように印刷されます。
YES
/tmp
しかし、私はただ欲しい
YES
答え1
パスを印刷するのがcd -
最後のコマンドです。最終作業ディレクトリを表示できるようにパスを印刷します。これはcd
オペランド(単一ダッシュ)を使用して呼び出すときに表示される特別な動作です。-
この場合、次のようになります。
cd "$OLDPWD" && pwd
cd "$OLDPWD"
これを防ぐには(OLDPWD
以前の作業ディレクトリの値を保持する特殊変数)を使用できますが、cd /tmp
失敗そしてコード出力NO
、そして両方ともcd -
予期cd "$OLDPWD"
しないディレクトリに移動することができます。
代わりに
(
cd /tmp
if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
echo YES
else
echo NO
fi
)
1つ目は、サブシェルの外部の作業ディレクトリにはcd
影響しません。(...)
さらに、テストはより安全で効率的に実行されます。
if [[ $PWD == */tmp ]]; then
echo YES
else
echo NO
fi
これPWD
は現在の作業ディレクトリのパス名を含み、通常はコマンドの代わりに使用したい変数ですpwd
。テストは、単に現在の作業ディレクトリのパス名が文字列で終わるかどうかをテストします/tmp
。これはawk
コードで実行したいことです(ただし、パス名に改行文字が含まれている場合は失敗します)。
cd
入ることができるかどうかを確認したいが/tmp
実際には入ることができない場合は、次を使用してください。
( if cd /tmp; then echo YES; else echo NO; fi )
macOSやSolarisなどの外部cd
ユーティリティを搭載したシステムでは、次のように使用できます。
if /usr/bin/cd /tmp; then
echo YES
else
echo NO
fi
外部cd
ユーティリティは実際に作業ディレクトリを変更するためには使用できませんが、特定のディレクトリに変更するかどうかを判断するなどのテストにはまだ役立ちます。可能でしょう。また、見ることができます「cd」外部コマンドの意味は何ですか?
実行する作業が/tmp
ディレクトリが存在し、ディレクトリ(またはディレクトリへのシンボリックリンク)であるかどうかをテストする場合、最も一般的なアプローチは使用せず、次cd
のテストを使用することです。
if [ -d /tmp ]; then
echo YES
else
echo NO
fi