パスが存在しても、スクリプトはそのパスが存在しないことを報告します。ロジックの欠陥は何ですか?
#!/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