0

幅広いUNIXシステムでcat / manページを見つけるための小さなシェルスクリプトを作成しています... bashでは、これを行うことですべての可能なパスを作成できました:

# default search paths
default=$(echo /usr/{share, local, dpkg, XR11}/man/{man, cat}{1..8})

for path in $default
do 
  ...
done

残念ながら、sh の使用を余儀なくされています... ループを使用してパスを構築することはできますが、これは非常に見苦しくなります...もっときちんとした/短い方法はありますか?

4

5 に答える 5

2

私の Linux システムでは、「man -w」は nroff ソース ファイルの内容ではなく場所を表示します。そうすれば、コマンドラインのユーザーと同じように、人間の内部検索を使用してファイルを見つけることができます。

詳しくは「マンマン」をご覧ください。

于 2009-11-23T22:29:19.793 に答える
1

これはひどいことではありません:

for dir in share local pdkg XR11; do
  for type in man cat; do
    for n in 1 2 3 4 5 6 7 8; do
      path="/usr/${dir}/man/${type}$n"
      # ...
    done
  done
done

または、DRY ではありませんが、これは明示的で読み取り可能です。

prefixes="
    /usr/share/man/man /usr/share/man/cat
    /usr/local/man/man /usr/local/man/cat
    /usr/pdkg/man/man  /usr/pdkg/man/cat
    /usr/XR11/man/man  /usr/XR11/man/cat
"
for prefix in $prefixes; do
  for n in 1 2 3 4 5 6 7 8; do
    path="${prefix}$n"
    # ...
  done
done
于 2009-11-23T23:09:25.657 に答える
1

検索を使用できます

find /usr/share /usr/local /usr/dpkg /usr/XR11 -type d \( -name "man[0-9]" -o -name "cat[0-9]" -o -name "cat" -o -name "man" \) 
于 2009-11-24T01:01:26.103 に答える
0

Bourne シェルを考えると、おそらく次を使用します。

for path in `ls -d /usr/*/man/[mc]a[tn][1-8]`
do 
    if [ -d $path ]
    then ...
    fi
done

これは、悪意のある誰かがディレクトリ/usr/spoof/man/man3、または/usr/share/man/mat1を作成した場合にのみ、道に迷ってしまうだけ/usr/dpkg/man/can2です。

于 2009-11-23T22:40:28.430 に答える
0

使用できますfind

find /usr/share /usr/local /usr/dpkg /usr/XR11 -type d -regex '.*/man/\(cat\|man\)[1-8]$'

私のシステムではman、上記によって除外されるローカライズされたページがたくさんあるので、これを行うことができます:

find /usr/share /usr/local /usr/dpkg /usr/XR11 -type d -regex '.*/\(cat\|man\)[1-8]$'
于 2009-11-24T01:03:08.673 に答える