概要
`sh`はUnixおよびLinuxシステムの基本的なシェルの一つで、スクリプトの実行や対話形式のコマンド処理に使用されます。POSIX標準を厳密に遵守するため、`sh`で記述されたスクリプトは様々なシステムで高い互換性を維持するのに有利です。
主な特徴
- POSIX互換性: 標準シェルスクリプト作成のための基盤を提供
- スクリプト実行: ファイルに保存されたコマンドシーケンスを実行
- 対話型コマンド解釈: ユーザーから直接コマンドを受け取り処理
- システム標準搭載: ほとんどのUnix/Linuxシステムに標準で搭載
主なオプション
`sh`はスクリプトの実行方法やデバッグに影響を与える様々なオプションを提供します。
スクリプト実行とデバッグ
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`sh` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
スクリプトファイルの実行
sh my_script.sh
指定されたシェルスクリプトファイルを`sh`を使用して実行します。
コマンド文字列の直接実行
sh -c "echo 'Hello from sh!' && ls -l"
`-c`オプションを使用して、引用符で囲まれたコマンド文字列を`sh`で実行します。
デバッグモードでのスクリプト実行
sh -x debug_script.sh
`-x`オプションを使用して、スクリプトの実行プロセスを追跡しながらデバッグします。
標準入力からのコマンド実行
echo "ls -a" | sh
パイプを介して渡されたコマンドを`sh`で実行します。
エラー発生時の即時終了
sh -e error_prone_script.sh
スクリプト内でエラーが発生した場合に即座に終了するようにします。
ヒントと注意点
`sh`は強力なツールですが、他のシェルとの違いを理解することが重要です。
スクリプト作成時
- スクリプトの最初の行に`#!/bin/sh`と記述し、そのスクリプトが`sh`で実行されることを明示するのが推奨されます。
- `bash`や`zsh`などの他のシェルの拡張機能(例: 配列、高度なパターンマッチング、`[[ ... ]]`条件文)は`sh`では動作しない可能性があるため、POSIX互換の構文のみを使用する必要があります。
- デバッグ時には`-x`オプションがスクリプトのフローを把握し、変数の値を確認するのに非常に役立ちます。
互換性
ほとんどのLinuxディストリビューションでは、`/bin/sh`は`dash`(Debian/Ubuntu系)または`bash`(Red Hat/Fedora系)へのシンボリックリンクです。したがって、`sh`スクリプトは、そのリンク先のシェルのPOSIX互換モードで実行されます。これは、`bash`スクリプトとは異なる動作を示す可能性があることを意味します。