• 締切済み

PERLとシェルについて

コマンドプロンプトで入力されたPERLコマンドはシェルのプログラムによってカーネルに引き渡されてカーネルがPERLのプログラムにそのコマンドを実行させて、その結果をカーネル→シェルへと引き渡されてコマンドプロンプトに表示されるのでしょうか?

みんなの回答

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.4

例えば、シェルで、 $ perl -e "print 'ABC';" と打つと、シェルが例えば /usr/bin/perl と引数 "-e" と "print 'ABC';" をカーネルに引き渡して、カーネルが /usr/bin/perl を起動します。 その後、perlが "-e" と "print 'ABC';" を解釈して、最終的には、少なくとも write(1,"ABC",3) というシステムコール(カーネル機能の呼び出し)が呼ばれて文字列が表示されます。 実際には、このほかに、直接結果が目に見えないシステムコールをいくつか行っています。 システムコールの様子は、 strace perl -e "print 'ABC';" でわかります。 シェルも含めてシステムコールを知りたければ、 strace sh -c "perl -e \"print 'ABC';\""

回答No.3

カーネルにこだわっておられるようですが、なぜでしょう? コマンドの流れと出力結果の流れを気にされてますか? それなら、fork,execとファイルディスクリプタの関係を調べられたらスッキリすると思いますよ。 shellがfork&execでperlを実行して、perlは(単純な場合)標準出力に結果を出力しているだけでしょうから。

  • toshi7607
  • ベストアンサー率12% (60/482)
回答No.2

shellからperlのプログラムを呼び出してるだけで、画面に表示させてるのはperlです。

deepest
質問者

お礼

回答ありがとうございました。 Perlプログラムがシェルによって呼び出され、コンソールに打たれたPerlコマンドはPerlプログラムによって解釈された後、カーネルに処理の命令をするといった一連の流れをたどるのでしょうか?

回答No.1

インタプリタはどこに行った?

関連するQ&A

  • シェルとカーネルについて。

    UNIX等ではシェルとカーネルの概念は有名ですが、Windowsにもシェルとカーネルの概念があると聞きましたが、具体的にはどの機能(?)がシェルに当たるのでしょうか? UNIXとかならシェルはコマンドラインの命令をカーネルに伝える、というのでなんとなく分かるのですが、Windowsでは基本的にはGUIで操作するのでどこがシェルなのかな?と疑問に思います。 (コマンドプロンプトで実行する際はWindowsでのシェルの役割が何となく認識できますが) どなたか分かる方、ご意見・ご回答お願いします。 (乱文ですいません)

  • シェルとは

     シェルとは【ユーザと対話する能力を持ち、カーネルに対して操作のお伺いを立てる仲介役のプログラム】と書かれていました。  また、シェルの機能として【コマンドとして入力された名前のプログラムを探し出して起動する。】ということも書かれていました。 そこで疑問を持ちました。前述では仲介役であると述べられてるのに対して、後述での機能ではプログラムを探し出し、起動する.と書かれていてCPUに指示・命令までしてるのか?と不思議に思いました。 下記のように解釈すればいいのでしょうか? プログラム探し出して起動するという命令をCPUに出すのはカーネルであり、あくまでもシェルとはユーザが打ったコマンドをOSが解釈できる形に翻訳してるプログラムにすぎないのですよね? 一般的なシェルの解釈は→仲介役 機能としてのシェルの解釈は→(カーネル+シェル) と考えればよろしいでしょうか?

  • perlスクリプト内でシェルコマンドを実行するには??

    タイトル通りなのですが、perlスクリプト内でシェルコマンドを実行させる方法が分からなく、困っています。 実行したいシェルコマンドはUNIXのcrontab なのですが・・。 また、perlスクリプト内以外でシェルコマンドを実行する方法はあるのでしょうか?? どなたか分かる方いらっしゃいましたらご教授いただけると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • シェルのリダイレクトとパイプについて

    シェルのリダイレクトとパイプについての質問です. リダイレクトでコマンドの標準出力をファイルに指定した後に, パイプを置いて,もう一つコマンドを並べたとき, 後の方のコマンドの標準入力はどうなるのでしょうか? 例えば, ls >outfile |cat ならば, catの標準入力には,何も入ってこないと思うのですが, これを実行すると,lsの結果がoutfileに書き込まれ, 次のプロンプトが表示されます. 普通,catを引数なしで実行すると, EOFが入力されるまで,入力待ちになると思うのですが, こうならないのは,シェルがcatの標準入力にEOFを入力したからだと 考えていいのでしょうか. よろしくお願いします. (質問の意味が分かりにくければご指摘下さい.)

  • シェルとは

    シェルとはCUIで操作するためのプログラムですか? コマンドプロンプトはシェルの機能の一つなのでしょうか? 2点よろしくお願いします。

  • perlからsystemコマンド呼ばれる時のシェルについて

    HP-UX/perl4 で作成したスクリプトを、Linux(Red Hat)/perl5 へ移植するに当たって、system関数の動作が異なり困っています。 HP-UX では ksh をシェルとして使用していたため、perl からのsysytem関数で実行するsystemコマンドも、kshで動作するものを使っていました。Linuxでもログインシェルをkshに設定しました。 ところが、HP-UXで使っていたprintコマンドが使用できず、以下のエラーメッセージが出ます。 sh: print: command not found シェルはkshを指定していても、perlからsystem関数やバッククウォート`` でシステムコマンドを実行するときは、shが使われるようなのです。 perl内の記述は以下のとおりです。 system("print 'a'"); "print"の前に"ksh "をつけたり、"print"を"echo"に変えると、正しく動作します。 移植するperlの本数が多いのと、print以外にもこの問題が起きるかもしれませんので、できれば perl 内からのシステムコマンド実行時にもログインシェルとおなじ ksh で動くようにしたいのですが、どのようにすればよいのでしょうか? よろしくお願いいたします。

  • fork、exec系、wait系のシステムコール(ライブラリ関数)でのシェル

    簡単なシェルを fork、exec系、wait系のシステムコール(ライブラリ関数)を利用して作りたいですがどのようなソースになるでしょうか? 最低限、以下の機能を実現しなければなりません 1.プロンプトを出力する 2.ユーザに端末からコマンドを入力させる 3.新しくプロセスを生成し、そのプロセスが入力されたコマンドのプログラムを実行する 4.そのコマンドの実行(子プロセス)が終了するまでシェル(親プロセス)は、プロンプトを出さずに待つ 5.1に戻る どうやってもうまくいかないので教えていただけないでしょうか

  • シェルで書いたプログラムをperlに変換って出来るんですか?

    まず・・・私は「シェル」という言語(?)のことをよく知りません。が、CGIを作るのに、Perlを使ったことはあります。 シェルのプログラムがあるのですが、どうやらサーバーがシェルをサポートしていないようです。この場合、シェルで書いたプログラムをPerlに書き換えることって出来るのでしょうか? ※とんちんかんな質問だったらゴメンナサイ。 それと、シェルのプログラムで 「echo」 って、どういう意味なんでしょうか。

    • ベストアンサー
    • CGI
  • シェルスクリプトのbashとperlについて

    シェルスクリプトのbashとperlについて 今さら気づいたのですが、PerlもUNIXのコマンドやシェルスクリプトとして使用できるということでしょうか。 RubyやPHPをUNIXのコマンドやシェルスクリプトとして使用することはできますでしょうか。 学ぶとしたら、bashとPerlのどちらが良いでしょうか。 また、シェルスクリプトはどんな用途や利点がありますでしょうか。 Webアプリケーションによるバックアップやログをタイマーでセットして自動的に取得したりすることは可能でしょうか。

  • perlのインストール

    perlのインストール後、コマンドプロンプトを起動してユーザー名の後、perl-vと入力したのですが、perl-vは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」となります。これではインストールが正しくされていないと思うのですがどうしたらよいのでしょうか。よろしくお願いします。

    • ベストアンサー
    • CGI