0

我正在构建一个小型 shell 脚本,用于在各种 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 源文件的位置而不是其内容。这样您就可以使用 man 的内部搜索来查找文件 - 就像命令行上的用户一样。

有关更多信息,请参见“男人男人”。

于 2009-11-23T22:29:19.793 回答
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 回答
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 回答
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 回答
0

鉴于 Bourne shell,我可能会使用:

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 回答