🗂

#!/usr/bin/env bash をちゃんと理解する

2024/06/16に公開

シェルスクリプトを書く際に、ソースコードの一行目に書く記述について。

#!/usr/bin/env bash

echo "Hello, World!"

#!

  • #! から始まる行のことを Shebang(シェバン)と呼ぶ
    • ハッシュ・バン(hash bang)、シェル・バン(shell bang)、シャープ・バン(sharp bang)とも呼ぶが、これらを縮めたシェバンという呼び方が一般的らしい
    • Wiki
  • 使用するインタプリタを指定する
    • インタプリタとコンパイラの違い
      • インタプリタ:ソースコードを一行ずつバイナリコードへ翻訳して実行する
        • 翻訳と実行が同時に行われる
        • プログラムをすぐ実行できる、エラーを見つけやすい、実行速度が遅い
      • コンパイラ:ソースコードを全てまとめてバイナリコードへ翻訳
        • 実行は別で行う
        • プログラムの実行速度は速いが、実行までに手間がかかる、変更があったら再コンパイル
      • コンパイラとインタプリタとは?現役エンジニアが分かりやすく解説
    • インタプリタを指定することでプログラムの移植性が高くなる
  • 参照:#!/bin/sh は ただのコメントじゃないよ! Shebangだよ!

/user/bin/env

  • envコマンド
    • 環境変数の値を一時的に設定 or 削除してコマンド実行できる
    • PATH環境変数の通っている場所から指定した言語のインタープリタが検索される
    • 例えば、#!/bin/bash とも記述できるが環境の違いによってパスが違う場合、実行されなくなってしまう
    • 汎用性、移植性が高くなる
  • 参照:Linuxで動かすスクリプトの1行目の設定

bash

  • Bash と Zsh
    • bash(バッシュ)
    • zsh(ゼットシェル)
  • 違い
    • zsh はデフォルトで自動補完が効く、bash はパッケージを導入する必要あり
    • zhs はテーマやプラグインをフレームワークを使うことで簡単に導入できる、bash は追加のパッケージが必要
    • bash の設定ファイルは、.bashrc や .bash_profile
    • zsh の設定ファイルは、.zshrc
  • Mac と Windows
    • Mac のデフォルトは昔は bash だったが、最近は zsh
    • Windows は PowerShell がデフォルトだが、Ubuntsu などを入れると bash や zsh が使える
  • 参照:BashとZshの違い
GitHubで編集を提案

Discussion