1

次のシェルスクリプトがあります。

#! /bin/sh

while read page_section
  page=${page_section%%\ *}
  section=${page_section#* }     #NOTE: `%* }` is NOT a comment

  wget --quiet --no-proxy www.cs.sun.ac.za/hons/$page -O html.tmp & wait

#  echo ${page_section%%\ *} # verify correct string chopping
#  echo ${page_section#* }   # verify correct string chopping

  ./DokuWikiHtml2Latex.py html.tmp $section & wait
done < inputfile

そして、次のような入力ファイル:

doku.php?id=ndewet:tools:tramonitor TraMonitor
doku.php?id=ndewet:description Implementation -1
doku.php?id=ndewet:description Research\ Areas -1

スクリプトは、指定された多数の Web ページをダウンロードしinputfile、残りの行 (例: "Implementation -1" または "Research\ Areas -1") を python スクリプトに渡す必要があります。

次に、スティッキー ビットについて説明します。このサンプル ファイルの 3 行目が処理されると、「Research\ Areas」が 2 つの個別の引数として Python スクリプトに渡されます。

>>> print sys.argv
['./DokuWikiHtml2Latex.py', 'html.tmp', 'Research', 'Areas', '-1']

「Research Areas」のような複数の単語のセクションを入力ファイルから python スクリプトの単一の引数に取得するにはどうすればよいですか? 「\」をエスケープしようとしましたが、

./DokuWikiHtml2Latex.py html.tmp `echo ${section#* }`

とりわけ、しかし役に立たない。

入力行の最後の数字は別の引数ですが、オプションです。

4

3 に答える 3

2

$section を引用符で囲みます:

./DokuWikiHtml2Latex.py html.tmp "$section" & wait
于 2010-07-19T16:13:15.123 に答える
1

read構文解析をしましょう:

while read page section rest
do
    echo "Page: $page"
    echo "Section: $section"
done < inputfile

オプションの引数をエレガントに処理するには、配列を使用します。

while read -a fields
do
    wget --quiet --no-proxy "www.cs.sun.ac.za/hons/${fields[0]}" -O html.tmp
    unset "fields[0]"
    ./DokuWikiHtml2Latex.py html.tmp "${fields[@]}"
done < inputfile

常に変数を引用してください!

于 2010-07-19T16:12:39.703 に答える
0

通常、複数単語の引数は、引用符を使用して 1 つとして渡すことができるため、次のようになります。

doku.php?id=ndewet:description "Research Areas" -1
于 2010-07-19T16:12:50.303 に答える