• 締切済み
  • すぐに回答を!

PERLとシェルについて

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

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数439
  • ありがとう数1

みんなの回答

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

例えば、シェルで、 $ 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';\""

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • シェルとは

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

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

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

    • ベストアンサー
    • Perl
  • 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 で動くようにしたいのですが、どのようにすればよいのでしょうか? よろしくお願いいたします。

  • 回答No.3

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

共感・感謝の気持ちを伝えよう!

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

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

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

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

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

    • ベストアンサー
    • CGI
  • perlのインストール

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

    • ベストアンサー
    • CGI
  • Kシェルのリダイレクト

    Kシェルのリダイレクト シェル初心者で申し訳ございませんが、ご教授いただけたら幸いです。 やりたいこと  xxx.kshの実行ログを出力したい。 出力したいログは、以下コマンド実行時に標準出力されるログをファイルへ落としたい。 尚、実際の実行コマンドは、ksh -xは入力しません。 $ ksh -x ./xxx.ksh 上記コマンドを実行すると、詳細なログが表示されるのですが、ファイルへ落としたいと思います。 分かりづらいかも知れませんが、宜しくお願い致します。

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

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

  • シェルのコマンドの仕組み

    シェルのコマンドの仕組みについて教えてください。 1、シェルのコマンドはシェルのフォルダにコンパイルされて保存されてるのでしょうか? 2、ユーザが打ったコマンドをシェルが解釈するときそのフォルダを検索して目当てのコマンドのプログラム実行してるのでしょうか? 間違えていたら、補足お願いします。

  • シェルとは

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

  • シェルのリダイレクトとパイプについて

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

  • シェルやコマンドを一定時間で終了させる方法ってありますか。

    こんばんは。 シェルやコマンドで例えば「ls」や「sleep」なんかは実行後には勝手に終わってくれますが、「top」等は止めるコマンドを入力しないかぎり終わりません。 このような特性を持っているコマンド、及びシェルを一定時間で終了するようにするには一体どうやればいいでしょうか。 シェルを作る際にどうしても自動で終わらないコマンドを入れたいのですが、それを入れるとその行以降のコマンドが実行されず、シェルが止まってしまって困っています。 環境はCentosです。どんな意見でもいいので教えて頂けたら幸いです。どうぞよろしくお願いします。

  • #!/usr/local/bin/perlで命令が出せません。

    プログラミングのド素人で、独学でwindows上でcygwinを使っている者から質問させていただきます。「#!/usr/local/bin/perl」というコマンドをプログラムの先頭に書いて、[ファイル名]を入力してcygwinで命令をしたところ、命令が実行できず、「commond not found」と出てしまいました。そこで、ネット上で、いろいろ調べて、試してみたのですが、どうしても、解決できません。 どなたか、アドバイスをいただけないでしょうか? ちなみに、perl [ファイル名]では、命令を実行することができます。「type -a perl」というコマンドを入力すると、「/cygdrive/c/Perl/bin/perl」というのがでてきたので、「#!/cygdrive/c/Perl/bin/perl」というコマンドを書いても上手くいきませんでした。 ちなみに、私が書いたプログラムは、以下のようなものです。 #!/cygdrive/c/Perl/bin/perl (あるいは#!/usr/local/bin/perl) # hello -- 挨拶のプログラム print ("hello");

    • ベストアンサー
    • Perl