LoginSignup
0
0

More than 3 years have passed since last update.

ファイルを実行しているshellの種類を正しく判定する

Posted at

ドヤ記事にすれば、もっといい方法をドヤってくれるshell芸達者が現れるはず!というきたない根性で書き残します。

やりたいこと

ubuntu(デフォルトがbash)でsh test.shを実施した時にshで実施された事を検知したい。
同様に、zsh test.shと実施した場合はzshを得たい。

結論

test.sh
#!/bin/sh
ps h -p $$ -o comm  # 期待する結果を得られる

# echo ${SHELL##*/}   # 検証用:何をやってもbashが返ってくる

実行時に

  • sh test.sh # sh
  • bash test.sh # bash
  • zsh test.sh # zsh

を取得できる。

psコマンドのオプションについて

  • h: ヘッダーを非表示
  • -p: 対象をPIDで指定
  • $$: sh実行中のPID
  • -o: 抽出。COMMANDはcomm(ここの情報が見つからなかった)

$SHELLについて

$SHELLで得られる結果はターミナルでログイン中のシェル(親シェル)であるため、shファイル内に互換性のない書き方をしている場合は何らかのフォローを検討するのが親切。
chsh $(which zsh)などで親シェル自体を変えてしまう方法もあるが、一つのスクリプトを実行するためだけにいちいち変更するのも手間がかかる。

反省(後記)

最初からman psを読めばこんなにハマらなかった。
ps --helpが使えないので諦めていたが、helpがダメならmanがあるよ、という灯台下暗し。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0