これがシンボリックリンクに/proc/ディレクトリがあるかどうかをテストする正しい方法ですか?

これがシンボリックリンクに/proc/ディレクトリがあるかどうかをテストする正しい方法ですか?

/etc/mtab シンボリックリンクが指しているかどうかをテストする必要があります。 POSIX規格に準拠する必要があります。 (通常はRHEL 5からRHEL 7まで実行する必要があります。)現在私が持っているものは次のとおりです。/proc/something

#!/bin/bash
if [ $(readlink -f /etc/mtab | grep '\/proc\/') ]; then
    echo do something related to proc
else
    echo do something other than proc
fi

いくつかの極端なケースを見逃しましたか?

答え1

  1. シンボリックリンクなら/etc/mtabどうでしょうか/home/mikasa/proc/something?おそらく^grep正規表現にaを追加する必要があります。
  2. 言い換えれば、/正規表現には特殊文字がないので、エスケープする必要はありません。
  3. そうしない妥当な理由がなく、自分が何をしているのかを知らない限り、シェル変数参照を引用する必要があります。これには$(…)コマンド置換が含まれます。/etc/mtab シンボリックリンクがあり、/proc/foo = barコマンドが次に拡張される非常に深刻な状況の場合
    if [ /proc/foo = 列 ]
    もちろん、偽と評価されます。二重引用符で囲むことで$(…)この問題を解決できます。
    もし[$(readlink -f /etc/mtab | grep '^/proc/')];その後
  4. testただし、コマンドの置き換えや(別名[...)を実行する必要はありません]。  grep検索を指示したパターンが見つかったかどうかを示す終了ステータスを提供するため、次のようにコマンドを単純化できるはずです。
    readlink -f /etc/mtab | grep '^/proc/' > /dev/null;

答え2

readlink -fPOSIXではありませんが、コードが好きなように動作するようです。

POSIX以外の良い解決策は次のとおりです。

if [ "$(df --output=fstype  /etc/mtab  | tail -n +2)" = "proc" ]; then

(procファイルシステムが/ procにマウントされていない場合でも機能します)

しかし、現実の世界では簡単に確認するだけで十分かもしれません。

if [ -L /etc/mtab ]; then

最後はutil-linuxテストスイートでも使用されており、これまでバグレポートを受け取っていませんでした。既存のLinuxディストリビューションでは、/ etc / mtabは通常のファイルまたは/ proc / self / mountsへのシンボリックリンクのようです。

関連情報