我試圖在一行中做一些事情,這是我的嘗試:
coolc -P p good.cool | xargs -I {} sh -c "diff <(sed 's/@[0-9] /@/g' {}) <(sed 's/@[0-9] /@/g' good.out)"
- 我有一個名為的檔案
good.out,我想sed在它上面運行:sed 's/@[0-9] /@/g' good.out - 我想運行
coolc -P p good.cool將結果列印到標準輸出 - 我想使用 (2) 的輸出
sed 's/@[0-9] /@/g' {} - 我想要
diff(1)和(3)
是否可以在不創建新檔案的情況下完成所有這些操作并且全部在一行中?
uj5u.com熱心網友回復:
假設原始代碼使用 xargs 是錯誤的,而您真的只想運行diff一次:
diff <(coolc -P p good.cool | sed 's/@[0-9] /@/g') \
<(sed 's/@[0-9] /@/g' good.out)
uj5u.com熱心網友回復:
當然可以對此進行優化(一遍又一遍地sed在同一個good.out檔案上運行并不是很有效),但是將您的代碼盡可能短地轉換為有效的東西(假設實際上有充分的理由使用xargs):
#!/usr/bin/env bash
while IFS= read -r filename; do
diff <(sed 's/@[0-9] /@/g' "$filename") \
<(sed 's/@[0-9] /@/g' good.out)
done < <(coolc -P p good.cool)
bash, notsh, 需要用于行程替換語法才可用。- 只要 的目的是每個寫入 的標準輸出的專案
coolc -P p good.cool | xargs ...運行一次,最好用BashFAQ #1回圈代替。...coolc -P p good.coolwhile read - BashFAQ #24:我在管道中的回圈中設定變數。為什么回圈終止后它們會消失?或者,為什么我不能通過管道讀取資料?- 這解釋了為什么使用
<( )回圈while read而不是管道。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/437421.html
