シェル - シェルスクリプト - 二重起動しない

 クラウディア
1. 概要
2. 対策

1. 概要

 「awesome」というデスクトップを使っていた時の話です。  細かい、わかりにくいところは、「awesome - 共通事項」をご参照ください。  「awesome」で、「xfce4-clipman」というクリップボードマネージャを使いたくて、ログイン時に自動起動しようと

~/.config/awesome/rc.lua
 内に

-- Autostart applications
awful.spawn.with_shell("~/.config/awesome/autostart.sh")
 を記述。

~/.config/awesome/autostart.sh
 内に

#!/bin/sh

・・・	略	・・・

xfce4-clipman &
 てなことを書いて、実行権限をつけておりましたらば・・・・。  思い通りに、ログイン時に起動できたのはいいものの。  ログイン状態で、「awesome」を再起動すると
「awesome」-「The Xfce Clipboard Manager is already running.」

 てな、ダイアログが表示されます。

 二重起動しちゃうから、だめってんですな・・・。

 以下の中で、「sh」の関数の文法に関しては、「Functions - Shell Scripting Tutorial」を参考にさせていただきました。

2. 対策

 「ArcoLinux 20.7.5 awesome」に対策の実例がありました。  同じものを少しはしょって書きますと。

#!/bin/bash

function run {
  if ! pgrep $1 ;
  then
    $@&
  fi
}

run "xfce4-clipman"
 と書いておる。  「function」で、「pgrep」を使用して、実行中か判断し、実行中でない時だけ、起動するわけです。  うまく、二重起動を防いでおりますな。  「bash」でなく、「sh」で書こうとして、少し戸惑いがありましたが「sh」で書くならば

#!/bin/sh

run()
{
  if ! pgrep $1 ;
  then
    $@&
  fi
}

run "xfce4-clipman"
 ということになります。  これで、うまいこといったのだ!  めでたし、めでたし。  これは、使えるわ。
earthcar(アースカー)