[英]bash script: parsing grep command output and passing to second action
docker-compose down
有時會崩潰,留下繁忙的資源,從而無法完全卸載和重新安裝docker卷
我可以通過執行以下操作來手動修復此問題:
grep -l 12c8b1e0d711db12b /proc/*/mountinfo
這使:
/proc/12053/mountinfo
/proc/16127/mountinfo
...
/proc/16139/mountinfo
/proc/16192/mountinfo
等等
每個數字現在是我可以做的過程PID
kill -9 16139 12053 ... 16139
我正在嘗試將其放入bash腳本中以幫助實現此過程的自動化。
問題:我需要通過正確的正則表達式傳遞grep命令的輸出,以解析出第二個參數(/ proc / 16192 / mountinfo每行中的int值)。 我需要將它們組合成一個空格分隔的字符串,最后將此字符串作為參數傳遞給kill
。
我不太確定如何在bash腳本中解決此問題
任何指針都歡迎
您可以使用帶有參數替換的直接bash腳本來提取進程ID,並將其放入數組中,然后在其上使用kill
。
例如:
declare -a process
for t1 in $(grep -l 12c8b1e0d711db12b /proc/*/mountinfo); do
t2="${t1#/proc/}" # remove /proc/ from beginning
pid="${t2%/mountinfo}" # remove /mountinfo from the end
process+=("$pid")
done
kill -9 "${process[@]}"
每當您發現自己想要解析grep,sed等的輸出時,就應該真正考慮僅使用awk。
procs=$(awk '/12c8b1e0d711db12b/{split(FILENAME,f,"/"); print f[3]}' /proc/*/mountinfo)
[ -n "$procs" ] && kill -9 "$procs"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.