Shell-Script
腳本的單個實例,但僅具有相同的參數
我在這裡有這個漂亮的小程式碼,如果有另一個實例正在執行,它將從腳本中退出:
single_instance(){ if pidof -x "${0##*/}" -o %PPID >/dev/null; then exit 0 fi }
但我正在尋找的是一個只有在使用相同參數呼叫腳本時才會退出的函式。
我知道我可以通過
cat | grep | awk | cut | sed | tac | sort | uniq
解決方案破解我的方式,但我想知道是否有一種簡單的方法可以使用 , 等實用程序來做到這pidof
一點ps
。你會怎麼做呢?
你可以這樣做:
#!/bin/bash single_instance() { pid=$(pidof -x "${0##*/}" -o %PPID) if [[ $(xargs -0 < /proc/$pid/cmdline) == $@ ]] then echo QUITTING exit 1 fi } single_instance $(xargs -0 < /proc/$$/cmdline) while : do sleep 10 done
man ps
在研究並添加了來自@goldilocks 的一些程式碼後,我想出了這個。它在處理帶有空格的參數方面做得很好,如果腳本被稱為bash scriptname
:single_instance(){ if ps -efww | grep "$(ps -o cmd= -p $$)$" | grep -vq " $$ "; then exit 0 fi }