Shell-Script

腳本的單個實例,但僅具有相同的參數

  • June 22, 2014

我在這裡有這個漂亮的小程式碼,如果有另一個實例正在執行,它將從腳本中退出:

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
}

引用自:https://unix.stackexchange.com/questions/138555