ベストアンサー シェルの作りかた 2011/04/11 12:58 LinuxやMacについているシェルってどうやって作るんでしょうか? 自作してみたいんですが 参考になるサイトか書籍があれば教えていただけるとうれしいです。 よろしくお願いします。 みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー chie65536(@chie65535) ベストアンサー率44% (8812/19983) 2011/04/11 13:59 回答No.1 bashなどのソースコードを入手して、ソースコードを読むのが一番早い。 要は、以下の処理をするアプリを作れば良い。 1.コンソールから1行入力する。 2.入力された1行を展開する(マクロ展開とか、ワイルドカード文字の展開とか) 3.展開後、コマンドライン単位で解析する(パイプとかリダイレクトとかサブシェル呼び出しも処理する) 4.解析した結果、コマンドがビルトインコマンドなら、自分でコマンドを処理する。 5.さもなくば(外部コマンドであれば)、コマンドに対応したアプリをパスが通った場所から探し、見付かったらアプリを呼び出す。 6.コマンドに対応したアプリが、パスが通った場所にも、カレントディレクトリにも無ければ、エラー表示する。 7.コンソール入力がまだ続くなら1.から繰り返す。入力がEOFで尽きたら終了コードを親プロセスに返して終了する。 ま、最初は「execlp()関数、execvp()関数」とか「fork()関数」とかの勉強が必要かな。 「プログラム中で別プログラムを呼び出す」とか「プログラム中で自分自身のコピープログラムを呼び出す」とかが出来ないとお話になりません。 質問者 お礼 2011/04/11 14:27 気長にやっていきたいと思います。 ありがとうございました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発その他(プログラミング・開発) 関連するQ&A シェル UNIXでの開発を始めたばかりの初心者プログラマです。 バッシュやCシェルなどのカスタマイズ(例えばよく使うコマンドを登録するなど)を行いたいのですが、参考サイトや書籍があったら教えて下さい。 シェルコマンドについて 先日自分のPCにやっとLinuxをインストールし、UNIXの勉強に励もうと思って いるのですが、基本的なシェルコマンドがまだよくわからなく苦戦しています。 もし、『シェルコマンド一覧表』みたいなのが、記載されているサイトがあるならば、URLを教えて頂けませんか? また、効率の良いシェルコマンドの覚え方があったら教えて下さい。 宜しく御願いします! シェルスクリプトで困っています 2 度々申し訳ございません。 現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。 その、Linuxマシン2からログアウトする際に、 "exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。 どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。 よろしくお願い致します。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム Bシェル・Cシェルについて 会社でシェルを使うことになりました。 OSはSolarisなので、basshが使えると考えていましたが、bashはNGと回答が来てしまいました。 回答はBシェルまたはCシェルを使うということでした。 bashはBシェルの拡張版でLinuxの標準シェルであるという事は知っています。 Bシェルだけの機能を使うのはかなり困難な気がしますし意識して作ったことがありません。 bashかBシェルか意識して使うにはどうすればよいでしょうか? Linux起動時にシェルスクリプトを走らせるには? いつも参考にさせていただいてます。 私はRedHat7.0でLinuxを勉強中です。 現在、Linuxの起動時にシェルスクリプトを走らせようと思っているのですがうまくいきません。 まだ初心者で手順自体が違っているかもしれませんので、大まかで構いませんので手順を教えてください。 シェルについて cshやbash、zsh、tcshなど色々ありますがどう違うのでしょうか。 これまであまり考えずにSoalrisやLinuxにログインして普通に作業してきましたが、ただtabやバックスペースが使用できないというだけでzshやtcshにして使用してきました。 ただこれだけ色々シェルがあるとしたら使用方法がいろいろ違うのではないかと思っております。 シェルスクリプトを作成する時の文法が違うとかでしょうか。 リナックスのシェルについて シェル変数はそのシェル内でのみ有効となる(ほかのシェルやプログラムでは有効にならない)と、ある参考書に書いてあるのですがそのシェル内とはどういうことなのでしょうか?また、その他のシェルに切り替えるにはどうすればよいのでしょうか? Linux・シェルから別PCWindows・バッチファイルを起動したい いつも参考にさせていただいています 【やりたい事】 Linux・シェルから別PC Windows・バッチファイルを起動したい 何かヒントがあれば教えてください ※PC Windows・バッチファイル起動からLinux・シェルを実行する方法があれば、こちらも教えてください ログインシェルと対話型シェルの区別について ログインシェルと対話型シェルの区別について理解していません。 ログインシェルはpsコマンドで見たときに-bashと表示されると書籍にありました。 テキストログイン(init 3)してpsコマンドをうっても-bashになっていません。 ご存知の方、いらっしゃいますでしょうか? シェルの学習 私はUNIXを使ったことがないのですが、仕事でシェルを使うことになりました。Linuxで勉強しようと思っているのですが、シェルとは難しいものなのでしょうか。また、どの位の学習時間が必要でしょうか?ちなみにプログラミングはCとJavaのプログラミングの経験はあります。 (PC初心者)シェルスクリプトおすすめ参考書 Linuxのシェルスクリプトを覚えようと思っています。 分かり易く挫折しない参考書or問題集があれば教えて欲しいです。 できれば、考えながら勉強したいので問題集の方がよいです。 ご存知あれば教えて頂ければ幸いです。 シェルの中からシェルを呼び出して判定 UNIXで以下のようなシェルが動作しております。 #!/bin/sh su abcdef -c './GHI'; err=$? if [! $err -eq 0 ] then echo エラーが発生しました fi exit このシェルは「abcdef」ユーザに移ってカレントディレクトリのシェルコマンド「GHI」の結果を判定するというものです。 UNIX上では問題なく動作しております。 これをLinuxでそのまま動作させると「err」に「su abcdef」というユーザ切替コマンド自身の正否を格納しているようです。 「'」でくくられた範囲内で結果をファイルに格納したりして、その後ファイルの中を見て判断するとうまくいくことは分かっておりますが、出来たらファイルなど使いたくありません。 このような場合、みなさんどうしてるんでしょうか? よく出てくるパタンだと思うのですがどうしても良い対処が見つかりません。 どうか宜しくお願いします。 Linuxは「miracle-Linux2.0」というOSです、いわゆるRedHat系です。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム シェルスクリプトの1行目 シェルスクリプトの1行目に#!/bin/bashと書くと思うのですが 環境によってbashのパスが違うのですが、そのような場合は2つ書くことは可能でしょうか? 例えばLinuxなんかは#!/bin/bashですよね? Macだと#!/bin/bashだと3系なので古いので5系をインストールすると#!/usr/local/bin/bashになるんです 1台のパソコンで使ってる分には問題ないですが他の環境で使う場合2つ書くにはどうしたら良いでしょうか? Cシェルの制御文について(求むCシェル・マスター) Cシェルでとある処理をすることになり、参考資料としてスペシャリストな人の シェルをみせてもらったのですが、ソースを読むこともままなりません(><) 私自身はVisualStudioを使ってCのプログラミングをかなり前にちょろっとやった程度で、 シェルというものをほとんど組んだことがないので、以下の点を教えてください。 if [ほにゃらら] then コマンドをぽちっとな elif [はにゃらら] then コマンド2をぽちっとな else exit fi 上記のような制御文を参考資料の中で多数みるのですが、 "elif"と"fi"が、まったく何者かわかりません。 Cシェルやelifなどで、ぐぐってみましたが、わからず 誰か助けてぇ~って感じです。 また、シェルの勉強サイト(C,Tc,B,Bash)のサイトも ありましたら教えてください。すんませんが、よろしくお願いします。 Linuxのシェル(sh,bash等)について Linux上でコマンドを実行するとき、その窓口となるものが、シェル(sh,bash)という認識です。 つまり、 (1)CUI環境でLinuxを操作する上で、シェル以外でコマンドを実行する事はありうるのか? (2)Windowsのコマンドプロンプトも一種のシェルと言えるか 以上、2点についてお教え頂きたいです。 宜しくお願いします。 なぜLinuxでKornシェルが使えるのでしょうか? Linux初心者です。 シェルについてわからないことがあり、質問させていただきます。 Linux(Red Hatを使っています)の /bin/shと/bin/cshは、それぞれ/bin/bash、/bin/tcshのシンボリックリンクファイル、 なのに対して、なぜkshだけは/bin/kshそのままなのでしょうか? また、KornシェルはAT&T社が開発したものだそうですが、 これはLinuxで使う際にライセンスの問題に触れないのでしょうか? よろしくお願いいたします。 LinuxでKornシェルが使えるのは何故でしょうか。 Linux初心者です。 シェルについてわからないことがあり、質問させていただきます。 Linux(Red Hatを使っています)の /bin/shと/bin/cshは、それぞれ/bin/bash、/bin/tcshのシンボリックリンクファイル、 なのに対して、なぜkshだけは/bin/kshそのままなのでしょうか? また、KornシェルはAT&T社が開発したものだそうですが、 これはLinuxで使う際にライセンスの問題に触れないのでしょうか? よろしくお願いいたします。 Linux、unix、シェルスクリプトの基礎知識、コマンドについて 会社でteratermを使ってコマンドベースの仕事をする機会があるため、コマンドやシェルスクリプトについて理解したいと考えています。 そこで疑問がわいてきたため、何点か質問があります。 1)teratermでtelnetで接続してコマンドを打つときはunixのコマンドですか?linuxのコマンドですか? 2)unixとlinuxで簡単なコマンドレベルでの差は無いものと考えて大丈夫でしょうか? 3)勉強するならunix、linuxどっちがお勧めですか? (今のところ参考書として、独習linuxか独習unixを買って勉強しようと思っています。他にお勧めの参考書があれば教えてください。) 4)シェルスクリプトを家でも作成してみたいのですが、ubuntuをインストールして端末上で操作し、作成して試すことはできるのでしょうか? (お勧めの参考書があれば教えてください。) 長くなってしまいましたが、よろしくお願いします。 シェルスクリプトでのcopy いつもお世話になっています。 基本がわかっていないので、お手数ですがよろしくお願いいたします。 シェルスクリプトでvacuumやcopyを行いたいのですが、どんな感じで シェルスクリプトを作成すれば良いのか分かりません。 参考サイトで構いませんのでお助けお願いいたします。 またシェルで同じテーブルに対し\copy...fromを同時に実行した 場合、問題はないのでしょうか?(キーが重複するデータはありません。) shはシェルなのかコマンドなのか? http://d.hatena.ne.jp/KishikawaKatsumi/20080504/1209922424 で $ sudo sh j2sdk-1_4_2_13-linux-i586-rpm.bin $ sudo rpm -ivh j2sdk-1_4_2_13-linux-i586.rpm と、shと打ち込むと最後の.binが消えますが、shは シェルなのか、それともコマンドなのかどちらなの でしょうか? 手元にあるlinuxの入門書には「shはシェルの一種である」 と記述があります。googleで検索をしてみましたが、 コマンドであるような記述もあり、混乱しております。 また、その入門書には「シェルを切り替えるには、コマンドライン でシェルの名前を入力します。exitコマンドで、元のシェル に戻ります」とあり、その文章の下には実際にshと打ち込んでexit で元に戻る様が書いてあるので実際に試してみました。 [root@localhost ~]# sh sh-3.2# exit exit [root@localhost ~]# この記述のせいでますますわからなくなりました。 なお、最後のbinがシェルスクリプトであることは理解して おります。 ご存じの方、ご教授頂ければ幸いです。何卒宜しくお願い申し 上げます。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
気長にやっていきたいと思います。 ありがとうございました。