ファイルシステムのマウントを確認し、ファイルパスを確認するためのGrepが誤った情報を提供する

ファイルシステムのマウントを確認し、ファイルパスを確認するためのGrepが誤った情報を提供する

パスが存在しても、スクリプトはそのパスが存在しないことを報告します。ロジックの欠陥は何ですか?

#!/bin/bash
mount="/fileserver"

if grep -qs "$mount" /proc/mount && { test -d '/fileserver/subdirectory'; } then
 echo "Both the mount and path exist."
else grep -qs "$mount" /proc/mount ! && { test -d '/fileserver/subdirectory'; }
 echo "mount exists, but path does not."
fi

答え1

アイデアは完全に正確ですが、否定演算子と一緒に使用されるのは&&完全に間違った場所にあるため、否定演算test子と一緒に使用する必要があります。

コマンドに従って、if条件の最初の部分は次のように評価されます。

grep -qs "$mount" /proc/mount !

否定演算子を検索する別のファイルとして処理すると、このgrep結果が表示されますが、ファイルにエラー抑制フラグが存在しないgrep: !: No such file or directoryため-s()エラーが端末に表示されません。

また、{..}コマンドだけがあれば複合演算子は必要ありません。あなたがしなければならないことは次のとおりです。

if grep -qs "$mount" /proc/mount &&  test -d "/fileserver/subdirectory";  then
    echo "Both the mount and path exist."
else grep -qs "$mount" /proc/mount && ! test -d "/fileserver/subdirectory"; then
    echo "mount exists, but path does not."
fi

grepつまり、スクリプトが実行中であることを確認する直前に出力を無音に設定する必要はありません。-qsデバッグ手順を追加するには、フラグなしで実行してみてください。


また、使用することができますマウントポイント(1)ツール:ユーティリティLinuxそのパスにパッケージがインストールされていることを直接確認するために使用します。

if mountpath -q "/fileserver/subdirectory"; then

関連情報