Quoting
具有多個參數替換的 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 的資訊嗎?
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"
因為這兩個命令都使用它們的文件描述符 1 和 2 做同樣的事情,所以我們最好在一開始就在一個地方做
echo
。w3m
您還可以避免
sh
每個文件執行一個: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"