• ベストアンサー
  • すぐに回答を!

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がシェルスクリプトであることは理解して おります。 ご存じの方、ご教授頂ければ幸いです。何卒宜しくお願い申し 上げます。

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

  • 回答数5
  • 閲覧数6003
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.4
  • vmi_jp
  • ベストアンサー率100% (2/2)

shを始めとするシェルには2つの側面があります。 1) インタラクティブ(対話的)シェル 「sh」だけで起動した場合はこの状態です。最初はキーボードからの入力待ち状態で、1行コマンドを入力してリターンを押すと即座に実行し、コマンドが終了すると、再度入力待ち状態に戻ります。 2) コマンドインタープリタ 「sh ファイル名」で起動した場合はこの状態です。キーボードの代わりに、ファイルからコマンドを読み取り/実行を繰り返します。最後まで処理を終えるか、ファイル内で終了コマンドを読み取った段階で終了します。 シェルスクリプトというのは、要は、一連の処理手順を手で入力する代わりにファイルにまとめて一気に実行できるようにしたものと思えば良いでしょう。

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

質問者からの補足

ご回答ありがとうございます。 1は、上記の質問を例に出すと sh-3.2# であり、 2は、 $ sudo sh j2sdk-1_4_2_13-linux-i586-rpm.bin と、vmi_jp様のご回答で認識したのですが、間違いないでしょうか? もしよろしければご回答頂ければ幸いです。どうぞ宜しくお願い申し上げます。

関連するQ&A

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

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

  • シェルの中からシェルを呼び出して判定

    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系です。

  • Javaのインストールはどうすればできるのでしょうか?

    こんにちは。お世話になります。 最近Fedora Core2の本を購入し、付録CDをインストールして、インターネットなどを閲覧して利用しています。 私の趣味である将棋のサイトから、対局の再現状況を見たいと思っているのですが、見ることができず、それにはJavaをインストールして下さいとなります。 そこでJavaのサイトからフリーのダウンロードを行っていくとj2re-1_4_2_06-linux-i586-rpm.binがダウンロードされたので、sh ./j2re-1_4_2_06-linux-i586-rpm.binを行うと、j2re-1_4_2_06-linux-i586.rpmがフォルダの中に表示されました。 それがインストーラーだと思い、ダブルクリックすると、”関連づけられたアクションはありません”と警告表示され、表示の下の方に「GNOME ではファイルの種類に応じたアプリケーションの関連づけを設定できます。ここで、このファイルの種類とアプリケーションを関連づけますか?」と書いてあります。 何のアプリケーションに関連づけたら良いのでしょうか?どうか宜しくお願いします。

その他の回答 (4)

  • 回答No.5
  • vmi_jp
  • ベストアンサー率100% (2/2)

>>No.4 その理解でOKです。

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

質問者からの補足

ご回答有り難う御座います。 >その理解でOKです。 vmi_jp様、有り難う御座います。これで、完全に理解することが出来ました。 有難う御座いました。

  • 回答No.3

コマンドとは、コンピュータに与える命令のことを一般的にさすのではないでしょうか。 シェルとは、コマンドを実行するインターフェイスを提供するものです。 つまり、シェルとはコマンドを実行する「インターフェイス」であって、 コマンドはコンピュータに与える「命令」ということになると思います。 例えば、firefox はコマンドですか? ブラウザですか? 前者は、firefoxを起動するというコマンド(命令)で firefox あくまでブラウザではないでしょうか?

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

質問者からの補足

ご回答有り難う御座います。 わかりやすいご説明、有り難う御座います。まだ初心者の初心者なので、わからない部分が補強されるような説明でした。

  • 回答No.2
  • notnot
  • ベストアンサー率47% (4584/9616)

javacはコンパイラなのかコマンドなのかどちらですか? WindowsのFreeCellはゲームなのかプログラムなのかどちらですか? のどちらかにでも答えられるようであれば、その回答の単語を入れ替えれば 「shはシェルなのかコマンドなのかどちらですか?」の回答になります。

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

質問者からの補足

ご回答有り難う御座います。 >javacはコンパイラなのかコマンドなのかどちらですか? >WindowsのFreeCellはゲームなのかプログラムなのかどちらですか? 今の私のレベルでは、どちらも説明できません。もっと勉強を重ねてみたいと思います。ご回答有難う御座いました。

  • 回答No.1
noname#29459

なんか、ソフトウェアを作っている人の質問とは、思えませんけど。 ”shとは、シェルですか?コマンドですか?” shとは、シェル(shell)であり、コマンドです。 もーすこし、噛み砕いて言うと、shの実態は、/bin/sh にある、コマンドインタプリタです。これは、UNIXの始まりのときから、ありました。 [root@localhost ~]# の状態で、入力をうけてしょりするのも、機動済みの/bin/sh その状態で、shとやると、もう1段 /bin/shが起動されて、それが、入力を受けます。  その状態で、exitとすると、その入力を受けていた/bin/shが成仏して、もとの/bin/shが、入力を受けるようになる。

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

質問者からの補足

ご回答有り難う御座います。 >なんか、ソフトウェアを作っている人の質問とは、思えませんけど。 まだいわゆる「hello world!」レベルなので、「ソフトウェアを作っている」レベルにも達していない初心者の初心者です。 >shとは、シェル(shell)であり、コマンドです。 shはシェルであり、同時にコマンドでもあるのですね。「どちらなのか?」ではなく、「どちらでもある」とは思いもしませんでした。 また、コマンドインタプリタという言葉もsilvercat9様のご回答で初めて知りました。その下のご回答も丁寧に有難う御座います。大変勉強になりました。

関連するQ&A

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

  • なぜ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で使う際にライセンスの問題に触れないのでしょうか? よろしくお願いいたします。

  • sedコマンドをシェルで実行でうまくいかない

    sedコマンドをシェルで実行しようとしています。 sedコマンドの引数がシングルクォートのためうまく出来ずに困っています。 テキスト内の /abc を xxx と変えたいとします。 以下のように作ってみました。 #!/bin/sh a='\/abc' b=xxx sed \'$a/$b\' txt しかし 認識できないコマンドです: '\/abc/xxx' というエラーが出ます。 $aで扱いたい変数は実はもっと長いパスの為、 ぜひ変数を使いたいのですが、うまくやる方法は無いでしょうか。

  • シェルから起動するコマンドの一部をマスクする

    シェルから起動するコマンドの一部にパスワードなどのセキュリティ情報が含まれている場合、それをpsコマンドなどによって見えなくするには、一般にどのような手法が採られているのでしょうか。 例えば、 #!/bin/sh USER=hoge PASS=hogehoge foo -u $USER -p $PASS というシェルを実行した時に、psコマンドで見ると foo -u hoge -p hogehoge と出ては困るわけで、 foo XXXXXXXX とかいう表示にできるとありがたいです。XXXXXXの部分は、ユーザ名やパスワードが表示されなければ、どんな表示でもいいんですけど…。

  • シェルで.bashrcが読めません。

    FreeBSD4.5で、 /home/me/の下に以下のシェルをファイル名1で作成し実行してもsuまでしか動きません。 パスもあっているのですが、原因は何が考えられますか? #!/bin/sh /usr/local/bin/sudo su www /usr/local/bin/bash source /home/me/.bashrc

  • Solaris rmコマンドをシェルで実行するとうまくいかない

    オラクルのアーカイブログを定期的に削除するシェルを作ったのですが、rmコマンドがうまくいきません。使っている環境はkshで、業務の都合上rootユーザでシェルを実行しています。 コマンド:/bin/rm -fr /mnt01/arch01/*.log ちなみに、rootユーザでプロンプトからコマンドを手で実行すると削除ができます。 何が原因なのか見当がつかない状況に陥っています。宜しくお願いします。

  • 【シェル】whileコマンドについて

    【シェル】whileコマンドについて OS:Solaris10 SH:Bシェル お世話になります。 whileコマンドにてテキストから、先頭に"#"(シャープ)が付いている行と、 空白行以外を読み込ませたいです。 ところが、メイン処理にawkコマンドを入れると、テキストを読む時点で、 行全体ではなく、指定したフィールド内の文字列を読みにいくため、 "#"(シャープ)が付いている行を無視することができません。 ====== while.sh ====== #!/bin/sh while read LINE do echo $LINE | awk '{print $2}' done < list.txt | grep -v "^#" | grep -v "^$" ====================== ------ list.txt ------ 1 2 3 #4 5 6 7 8 9 ---------------------- ****** 出力結果 ****** 2 5 8 ********************** ** 出力させたい結果 ** 2 8 ********************** whileコマンドのオプション等で、テキスト内に特定の記号がある行は 無視して読み込ませる方法がありましたら、ご教授ください。 宜しくお願い致します。

  • シェルについて

    Linuxにパッケージをインストールした後に、パッケージがちゃんとインストールされているかと確認するというrpmcheck.shを下記に作成したのですが、実行環境がなく、下記に自分で記述したシェルが動作するかわかりません。どなたか、実行が可能か教えてください。 ---------------------------------------------------------------- #!/bin/sh PKG_NAME=`rpm -qa | grep -e PAKAGEinst grep -e ABCnv` echo $PKG_NAME if [ $PKG_NAME = PAKAGEinst,ABCnv ] ; then echo "パッケージはすべてインストールされました!" else echo "パッケージが足りません!" fi ---------------------------------------------------------------- こんな感じで、記述したのですが、UNIX系OSに触れていないので、よくわからないです。どのたか、アドバイスをお願いします。

  • crontabでのシェル自動実行がNG

    いつも参考にさせてもらっています。 linux(Red Hat Enterprise Linux ES release 3 Apache/2.0.46)上でcrontabを設定したいのですが、 現在うまくいっておりません。 まず、autoindex.shというシェルを/home/foo/scripts/ディレクトレィに作成しました。中身は3行からなっていて #!/bin/sh cd /var/www/html/search/index mknmz -a /var/www/html/test です。telnet上でroot権限を使用し、./autoindex.shコマンド発行で正常に動作しました。 そこで、crontabに以下のように # crontab -l 50 11 * * * root /home/foo/scripts/autoindex.sh と設定したところ、 # more /etc/log/cron Sep 27 11:50:01 intra crond[18280]: (root) CMD (root /home/foo/scripts/autoindex.sh ) とcronは決めていた時間(11時50分)に稼動しているようなんですが、mailを見ると # mail -t From root@XXX.com Wed Sep 27 11:50:01 2006 Date: Wed, 27 Sep 2006 11:50:01 +0900 From: root@XXX.com (Cron Daemon) To: root@XXX.com Subject: Cron <root@hoge> root /home/foo/scripts/autoindex.sh X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/root> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=root> X-Cron-Env: <USER=root> /bin/sh: line 1: root: command not found と、シェルがこけているようです。 何か解決のヒントがありましたら、ぜひ教えていただけないでしょうか。