複数の引数置換を持つXargs - sh -c '...'の後に環境変数引数を使用する

複数の引数置換を持つXargs - sh -c '...'の後に環境変数引数を使用する

これは私のコマンドです:

find $1 -name "*.html"  | sort -n | xargs -I {} sh -c 'echo "Dumping file: "{} >> "$2"; w3m {} >> "$2" 2>&1'

どこ:

$ 1は、拡張子が.htmlのファイルを見つけるパスです。

$ 2は情報を記録したいファイルです(ダンプファイル:* htmlとこのhtmlファイルに含まれる情報)。

問題は、2ドルが解釈されないことです。おそらく、この変数は '...'の間で二重引用符を使用してみましたが、コマンドは機能しませんでした。

私のコマンドラインに$ 2情報を渡す方法を知っている人はいますか?

ベストアンサー1

find "$1" -name "*.html" -print0 | sort -zn | xargs -r -0 -n 1 sh -c '
   echo "Dumping file: $2" >> "$1"; w3m "$2" >> "$1" 2>&1
' sh "$2"

別の最適化は次のとおりです。

find "$1" -name "*.html" -print0 | sort -zn | xargs -r -0 -n 1 sh -c '
   exec 1>> "$1" 2>&1
   echo "Dumping file: $2"
   w3m "$2"
' sh "$2"

echoどちらのコマンドもw3mファイル記述子 1 と 2 を使用して同じことを行うので、最初から 1 つの場所で実行するのが最善です。

sh各ファイルに1つずつ実行する必要はありません。

find "$1" -name "*.html" -print0 | sort -zn | xargs -r -0 sh -c '
   out=$1; shift
   for file do
     echo "Dumping file: $file"
     w3m "$file"
   done >> "$out" 2>&1
' sh "$2"

おすすめ記事