3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

シェルで書くshebangのオプションはsetにつけた方が便利な話

Last updated at Posted at 2019-08-21

#はじめに
シェルのshebangって難しいですよね。

ぶっちゃけ私も完全に理解しているわけではありませんが、使い方がわかると意外と便利です。

今回はshファイルを実行する場合に、shebangに渡すオプションをsetに渡すようにするだけで便利になる話をご紹介します!

#例
サンプルコードとして下記を用意しました。test.shというファイルを作成してコードを書きます。

test.sh
cp sample.txt test/
echo "つづくよー"

処理内容は、ファイルをコピーして文字列を出力するだけです。ですがsample.txtもtestディレクトリも用意してないので、当然エラーになります。

下記コマンドで実行できますので、ぜひローカルでも試してみてください!

$ sh test.sh

##shebangにオプションをつけた場合

test.sh
##!/bin/bash -xe

cp sample.txt test/
echo "つづくよー"

実行結果は下記になりました。

cp: directory test does not exist
つづくよー

って、エラーなのに次の処理が続いちゃっとるー!wwwww

##setにオプションをつけた場合

test.sh
##!/bin/bash
set -xe

cp sample.txt test/
echo "つづくよー"

実行結果は下記になりました。

+ cp sample.txt test/
cp: directory test does not exist

エラーが出た行でちゃんと止まりました!

ちなみにxオプションで実行するコード自体を出力しています。eオプションによってエラーで処理が止まるようになっています。

##原理
聞けば当然ですが、shebangに渡したオプションはshebang経由で起動しないと有効になりません。

そしてファイル名指定で起動した場合は有効になりません。

#用途
私の周りではJenkinsのJob内で使うshファイルに使っています。

大体の場合、途中で1行でも失敗したらその後の処理もおかしくなりますが、shebangにオプション付けると一番最後の行が成功したら成功ステータスで終わっちゃうんですよね。

setにオプションをつけることによって、スクリプトが1行でも失敗したらJobを失敗ステータスにすることができます。

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?