LinuxのShellの仕様について

このQ&Aのポイント
  • LinuxのShellの仕様とは?コマンドラインの処理順序や違いについて詳しく知りたい
  • コマンドプロンプトとの違いは?ワイルドカードの展開などの挙動に注目
  • LinuxのShellの仕様に関する役に立つ情報やサイトも教えて頂けると助かる
回答を見る
  • ベストアンサー

LinuxのShellの仕様について

こんにちは。 現在、WindowsVistaで、CygwinのBashを使っています。 そこで、LinuxのShellの仕様がどのようになっているのかを、詳しく知りたいと考えています。 具体的に知りたいのは、 「LinuxのShell、はコマンドラインをどのような順序で、どのように解釈し、処理しているのか?」 という事です。 Windowsでは、まず、コマンドプロンプトがコマンドラインを処理し、 処理された後のコマンドライン引数を、各コマンドが受け取るようになっています。 これはLinuxのShellでも同じだと思うのですが、例えば、 「コマンドプロンプトはワイルドカードを展開せず、ワイルドカードは各コマンドが処理している。」 といったような違いが見られます。 説明して下さるのが面倒だとお考えの場合は、役に立つサイトのURLだけでも教えて頂けると 大変助かります。 では、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

とりあえずこのあたりから。。。かな? 日本語なら http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html 最新の詳細な情報が必要なら http://www.gnu.org/s/bash/manual/

MetalLover
質問者

お礼

情報提供ありがとうございます。 日本語のマニュアルが見つからず困っていたので、大変助かります。 是非参考にさせていただきます。

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

Cygwinでbash使っているなら、Linuxの(というか他のプラットフォームも含めた)bashもほぼ同じですけど。 Cygwin上で処理しているときは、コマンドプロンプトは経由しませんよ

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

全てを知ろうとするとPOSIXシェルの仕様書(↓)を読むか bashのソースコードを追いかけるかしかなくなってしまいます。 http://pubs.opengroup.org/onlinepubs/009695399/ Shell & utilities なので、わからない部分についてピンポイントで質問されるのがよいと思います。 > 「コマンドプロンプトはワイルドカードを展開せず、ワイルドカードは各コマンドが処理している。」 少なくともワイルドカードの展開は認識されているようにシェルが担当していますね。

MetalLover
質問者

お礼

御回答ありがとうございます。 僕の能力では、さすがにbashのソースコードを解読するのは無茶がありますね。 >わからない部分についてピンポイントで質問されるのがよいと思います。 そうですよね。 漠然とした質問で申し訳ございませんでした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

man なり info なりは確認しましたか?

関連するQ&A

  • Linux の shell プログラミングについて

    すみません、どなたがご存じでしたら教えてください。 Linux の shell プログラミングですが、 実行するコマンドをそのまま表示する良い方法が無いでしょうか? 現在は実行するコマンドをechoで書いています。 たとえば次のような感じです。 #!/bin/bash var1=/etc echo 'ls -l $var1 | wc -l' ls -l $var1 | wc -l 結果 ls -l $var1 | wc -l 205 でも(echoで)同じ内容を2行書きたくないので いろいろ調べて次のようにしてみました。 #!/bin/bash var1=/etc set -x ls -l $var1 | wc -l set +x 結果は + ls -l /etc + wc -l 205 + set +x 思ったようになりませんでした。 他に良い方法が何かありますでしょうか? よろしくお願いいたします。

  • Emacsのshellモードに関する質問

    Emacsのshellモードにに関する質問 こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 shellモードについて、2つ質問させて下さい。 ・cdといった、bashの組み込みコマンドが、日本語を対処できない。 shellモードのシェルとして、bashを使った場合、cdコマンドの引数に、 日本語を含むディレクトリを指定すると、 No such file or directoryと表示されて、目的のディレクトリに移動できません。 具体的には、以下のような感じです。 ------------------------------------------------------------ Kei-Valuestar@Kei:~/Make_Tests_for_C_Files $ls 2つの関数、1つのヘッダ make_01 make_02 make_03 make_04 make_05 make_06 make_07 make_08 make_09 デフォルトシンボル、組み込み関数一覧.url トリビアなmakefile入門.url Kei-Valuestar@Kei:~/Make_Tests_for_C_Files $cd 2つの関数、1つのヘッダ/ bash: cd: 2つの関数、1つのヘッダ/: No such file or directory ------------------------------------------------------------ 日本語環境は整えてあるので、lsコマンドでは、日本語ファイルがきちんと表示されていますし、日本語ファイル名の補完も上手く行くので、bashの組み込みコマンドである、 cdだけが、日本語を適切に扱えないのだと思います。 日本語も扱える、cdコマンド(exeファイル)は、どこかで配布されてないのでしょうか? ・moreやlessといったコマンドが、きちんと動作しない。 shellモードでは、コマンドプロンプトや、cygwinのbashを使うのですが、 どちらを使った場合でも、moreやlessといった、ファイルの内容をページごとに表示する コマンドを実行した時に1ページづつ表示されず、catコマンドを実行した場合と同じように、ファイルの内容が全て表示されてしまいます。 何か対処法は無いでしょうか? 以上の件で、何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • cygwin で "bash --login -i"するとホームディレクトリに移動してしまう

    cygwin で startx から X-Window を使いたいと思っています。 私は cygwin.bat を使わずに、コマンドプロンプトから直接 bash とタイプしています。(エクスプローラから好きなディレクトリでコマンドプロンプトを開くことができるようにしてあります) (1) コマンドプロンプトから bash とタイプとすると、startx とタイプしても反応がありません。 (2) bash --login -i とタイプすると、startx はできるのですが、ディレクトリが勝手に cygwin のホームディレクトリに移動してしまいます。 ディレクトリを移動せずに cygwin を起動して xwindow を使う方法はないでしょうか?

  • DOSプロンプトでLinuxコマンドを使えるようにするには

    Windows XP (SP2)を使っています. 以前はDOSプロンプトでLinuxコマンドが使えたんですが,今は使えません.ディレクトリの中身を見るのもlsでなくdirとうたなくてはなりません. 最近HDDを増設したのに伴い,以前は入れていたCygwinを消してしまいました.これが原因なんでしょうか? もしCygwinをいれないとLinuxコマンドが使えないのであればその旨を教えていただけないでしょうか?再インストールします. 以上,よろしくお願いいたします.

  • cygwin上でのTeraPadの起動

    cygwin Bash Shell上でTeraPadの起動を コマンド(tpで起動)させたいのですが、どうすればいいか分からなくなってしまいました。 .bash_profileファイルを開くまでは憶えているのですが... それ以降、何をすればいいのか全くおぼえていません。 どうかお願いします。

  • Linuxのシェル(sh,bash等)について

    Linux上でコマンドを実行するとき、その窓口となるものが、シェル(sh,bash)という認識です。 つまり、 (1)CUI環境でLinuxを操作する上で、シェル以外でコマンドを実行する事はありうるのか? (2)Windowsのコマンドプロンプトも一種のシェルと言えるか 以上、2点についてお教え頂きたいです。 宜しくお願いします。

  • bashでのシェル変数の遅延展開

    こんにちは。 現在、Cygwinでbashを使っています。 最近思ったのですが、コマンドプロンプトにおける環境変数の遅延展開のような機能が、 bashでは存在しないのでしょうか? 例えば、~/.bashrcで alias cdb="cd $OLDPWD" と記述しておき、ディレクトリを移動する度に、このエイリアスの動作が変化するようにしたいと思っています。 何か御存じの方がいらっしゃれば、是非アドバイスを頂きたいです。 では、よろしくお願い致します。

  • bash --login -i ??

    windows の cygwin でセットアップされる cygwin.bat を見ると、 bash --login -i と書いてあります。 --login 、-i とは何だろう、と思って man bash とすると、 --login はログインシェル -i はインタラクティブモード となっています。 (1) ログインシェルとはなんでしょう? 気づいたこととしては、コマンドプロンプトから bash と入力するだけのときと、--login をつけたときでは、プロンプトがちがうようです。(.bashrcを読み込まない?) (2) インタラクティブモードとはなんでしょう。 -i をつけたときとつけなかったときで、特に目に見えた違いはわからなかったのですが。。

  • shellスクリプトに複数の引数を渡したい

    shellスクリプトに複数の引数を渡したいと考えています。 下記のようなperlスクリプトを兼ねる事でやりたいことは達成できました。 これをシェルスクリプトだけでやろうとしていて、ハマってしまい、やり方がわからなかったので、質問しています。 ・echo.shの中身 $ cat echo.sh echo $1 $2 ・imglist.plの中身 $ cat imglist.pl my@imglist= `ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} 2>1&`; foreach(@imglist){ my@name=split /\./,$_; system("bash ./echo.sh $name[0] $name[1]"); } ・実行すると、無事echo.shに引数が2つ渡る。 $ perl imglist.pl abc1 jpg abc10 png abc11 png abc2 jpg abc3 jpg これをシェルのみでやろうとして、はまってしまいました。 以下は、パイプ処理等を使ったりしてやってみたのですが出来ませんでした。 ・awkでファイル名と拡張子に分解し、パイプで渡そうとしても何故か渡らない・・ $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}'| bash ./echo.sh ・ファイルに一旦保存し、catコマンドでパイプで渡しても駄目 $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}' > imglist.txt $ cat imglist.txt | bash ./echo.sh ・echoコマンドを使ってパイプで渡しても駄目 $ echo `cat imglist.txt` |bash ./echo.sh ・for.shというファイルを作成し、for構文でimglist.txtの中身を渡すと引数が一つずつしか渡らない $ cat for.sh for id in $(cat imglist.txt); do echo $id done $ bash for.sh tile1 jpg tile10 jpg どうやれば、コマンドライン上やシェルスクリプトだけで、今回はファイル名と拡張子という形で複数行からなる2つの引数を渡すことができますでしょうか

    • ベストアンサー
    • Perl
  • シェルスクリプトで、ファイル名のワイルドカード展開を抑制する方法は?

    Cygwinのbashスクリプトの記述方法について質問です。「*.zip」等のワイルドカード付き文字列を関数引数に渡す時、「*」のまま渡す(展開を抑制する)方法はあるでしょうか? 例えば、次のbashスクリプトコードを実行します。 f(){ echo $1 } f *.zip すると、*.zipに合致するファイル名が全て表示されてしまいます。これを「*.zip」と表示させる(*を展開させない)方法を知りたいです。''や""で囲んで試みましたが、ダメでした。 数ヶ月前のCygwinでは展開されなかったのですが、最近のCygwinで挙動が変わってしまいました。そこで対処法がどうしても分からず質問させて頂きました。どうぞ宜しくお願い致します。 環境:WinXP Pro.、Cygwin(sh.exeのバージョンは3.2.33)