コンテンツにスキップ

bashスクリプトでコマンドの逐次表示

[質問]

bashでスクリプトを実行しつつ、実行しているコマンドを表示できますか。Windowsのバッチで"@echo on"のような機能です。

[回答] Gemini

はい、可能です!bashでもWindowsのバッチファイル(.bat)の @echo on と同じように、実行されるコマンドを逐一ターミナルに表示する機能があります。

主に2つの方法があります。


1. スクリプト内で設定する(おすすめ)

スクリプトの冒頭に set -x と記述します。これがWindowsの @echo on に相当します。

#!/bin/bash
set -x  # ここからコマンドの表示を開始

echo "こんにちは"
ls -l
  • 解除する場合: set +x と書くと、それ以降のコマンド表示がオフになります(@echo off 相当)。
  • 特徴: スクリプトの特定の区間だけを表示させたいときにも便利です。

2. 実行時にオプションを指定する

スクリプト自体を書き換えずに、実行コマンドに -x を付け加える方法です。

bash -x script.sh

表示のカスタマイズ(Tips)

bashでこの機能(デバッグモード)を使うと、通常はコマンドの先頭に + 記号が表示されます。これによって「スクリプトの出力」と「実行されたコマンド」を見分けることができます。

もしこの + を変更したい場合は、環境変数 $PS4 を変更します。

export PS4='+ [$(date +"%H:%M:%S")] '

このように設定すると、実行された時刻なども一緒に表示できるようになります。


実行結果が意図通りか確認するために、まずは簡単なスクリプトで set -x を試してみますか?