【Unix】bash-4.2$ とは? コマンドとして認識されない時の原因と解決方法

【Unix】bash-4.2$ とは? コマンドとして認識されない時の原因と解決方法

 Unix初心者がコマンドを実行したい時、bash-4.2$を打ち込んでみるとCommand not fountと表示されてしまいました。今回はUnix初心者が勘違いしがちなbash-4.2$についてわかったことをお伝えします。bashって何?ってくらいの方におすすめな内容です。

はじめに

 筆者はUnix初心者です。

 bashについて何もわからないまま以下のコマンドを実行してみました。

 コンパイルするための処理です。

bash-4.2$  gcc -S test.c

 さっそく打ち込んで実行してみると以下のエラー文が表示されてしまいました。

bash-4.2$:Command not found.

 え、コマンドじゃないの!?って悩んだ結果、わかったことを共有します。

bashって何?

 bashとは、Bourne-again shellの略です。

 Bourne Shellとborn againに引っ掛けて生まれた言葉のようです。

Bourne Shell Unix Version7のUnixシェルのこと。
born again 現代アメリカのキリスト教において精神的な再生を意味

 bashの意味はコマンド言語のことでした。

 つまり、コマンドではないので打ち込むとエラー文が表示されたわけですね。

bashの機能

Bashのコマンド構文は、Bourne shellのコマンド構文のスーパーセットである。構文の前処理においてBashと異なって解釈される振る舞いに偶然遭遇してしまったり、新しくBashに組み込まれたコマンドと同じ名前のシステムコマンドを起動しようとするBourne shellスクリプトを除いて、Bashは大量に存在するBourne shellスクリプトのほとんどを修正せずに実行可能である。Bashのコマンド構文には、コマンドライン編集、コマンド履歴(英語版)、ディレクトリスタック、変数 $RANDOMや変数 $PPID、およびPOSIXのコマンド置換(英語版)構文である$(コマンド)など、KornShellやC shellから引用したアイデアが含まれる。

ユーザーがインタラクティブコマンドシェルでタブキーを押した場合、Bashは途中までタイプされたプログラム名やファイル名などの様々な名前をマッチさせるコマンドライン補完(英語版)を自動で行う。Bashのコマンドライン補完システムは大変融通が利きカスタマイズ可能であるため、特定のプログラムやタスク用の引数やファイル名を補完する関数とまとめてパッケージングされることが多い。

Bashの構文には、Bourne shellにはない拡張が多く存在する。Bashは他のプロセスを生成せずに整数演算ができる。この演算のためにBashは ((数式)) コマンドと $((数式)) 変数構文を利用する。Bashの構文は入出力リダイレクトを単純化する。例えば、Bashでは &> 演算子を使用することで、標準出力と標準エラー出力を同時にリダイレクトすることができ、Bourne shellにおいてこれに相当するコマンドである コマンド > file 2>&1 よりも簡単にタイプできる。Bashは<(コマンド)および>(コマンド)構文を使用することにより、プロセス置換(英語版)をサポートする。この構文は、通常のリダイレクトではファイル名が記述される箇所にあるコマンドの出力(または入力)を引数の代用とする(これは名前なしパイプをサポートするシステムならば /proc/fd/ の名前なしパイプにより実装され、名前付きパイプが必要ならば一時的な名前付きパイプにより実装されている)。

function キーワードを使用する場合、Bashの関数宣言はBourne・Korn・POSIXスクリプトと互換性がない(KornShellでも function を使用する場合に同様の問題が起こる)が、BashはBourne shellやKornShellの関数宣言構文を受け入れるためPOSIX準拠である。これ以外にも違いがあるため、互換性確保を配慮せず書かれたBashのシェルスクリプトをBourneやKornShellのインタプリタで起動できることは滅多にないが、Linuxが普及するにつれて互換性確保を配慮せずに書くことは少なくなっている。ただしPOSIXモードにおいては、Bashはより密接にPOSIXに準拠している。

Bashはヒアドキュメントをサポートする。Bashはバージョン2.05bより、<<<演算子を使った「ヒア文字列」から標準入力へのリダイレクトが可能である。

Bash3.0ではPerl言語を思い起こさせる構文を使用した、シェル組み込みの正規表現をサポートする。

Bash4.0では連想配列のサポートが導入された

wiki

解決方法

 bash-4.2$を除外して、以下のコマンドを実行すれば無事コンパイルできました!

gcc -S test.c

 同じく悩んでいた方の役に立てば幸いです。