やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

bashでコマンド存在確認する最短方法

 type&&,||を使う。

成果物

コード

type "確認したいコマンド名" > /dev/null 2>&1 && echo "存在する"

 たとえば以下のように使う。diffコマンドが存在するとき、存在すると表示する。

type "diff" > /dev/null 2>&1 && echo "存在する"

改良

IsExistCmd() { type "$1" > /dev/null 2>&1; }
IsExistCmd 存在確認したいコマンド名 && 存在したときの処理 || 存在しなかったときの処理

使用パターン

  IsExistCmd diff && echo "ある"
! IsExistCmd diff && echo "ない"
  IsExistCmd diff && echo "ある" || echo "ない"

 処理内容を複数行にしたいときは以下。

IsExistCmd diff && { echo "アル"; echo "アル"; } || { echo "ナイ"; echo "ナイ"; }

用途

  • インストール済みコマンドによって処理内容を変更する
  • インストールコマンドを実行する

情報源

 知りたいことが全部書いてある。感謝。

疑問 解答
> /dev/null 2>&1とは? stderrstdoutへ出して破棄する
なぜif文なしにチェックできる? 終了コード$?を見ているから

所感

 こういうの調べるだけで時間とられる。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux