シェルについて

このQ&Aのポイント
  • ターミナルの挙動を教えてください
  • OS10.8でtcshを使い、perlを入力するとエラーメッセージが表示されますが、環境変数の設定でエラーが解消しました。しかし、tcshからbashを起動するとエラーが出なくなります。この挙動は疑問です。
  • tcshから子シェルbashを起動してもperlでエラーが出ないのはなぜでしょうか?
回答を見る
  • ベストアンサー

シェルについて

ターミナルの挙動を教えてください OS10.8でtcshを使っています perlを入力すると以下の様にエラーが出ます perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = (unset), LANG = "ja_JP.EUC" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). 環境変数 setenv PERL_BADLANG を.tcshrcに書きました これでエラーは出なくなりました ここからが疑問なんですが tcshから子シェルbashを起動しても perlでエラーが出ません tcshの環境変数をbashが読み込んでます 子シェルの振る舞いなのでしょうか よろしくお願いします

  • Wap58
  • お礼率67% (19/28)
  • Mac
  • 回答数2
  • ありがとう数1

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

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

No1です。 >lsなどは組み込みコマンドなんで理解できます ls はシェルの組み込みコマンドではありません。/bin/ls か /usr/bin/ls にある外部コマンドです。 立場的には、/bin/bash と同じ。 >bashはexportじゃないのかなと思いました bashが親プロセスから引き継いだ環境変数以外に、新たに環境変数を追加するときに使うコマンドがexportです。

Wap58
質問者

お礼

わかりやすい回答ありがとうございます

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

文章がわかりにくいのですが、 tcshからbashを起動した場合、tcshで設定した環境変数はbashに引き継がれるのか? という意味なら、そうです。bash起動時に設定される物以外は引き継がれます。 もちろんbash以外でもなんでも子プロセスに引き継がれます。perlとか、ls とか。 そもそも環境変数というのはそのためのもの(子プロセスに設定を引き継ぐための物)です。

Wap58
質問者

補足

回答ありがとうございます >tcshからbashを起動した場合、tcshで設定した環境変数はbashに引き継がれるのか? そのとうりです lsなどは組み込みコマンドなんで理解できます bashはexportじゃないのかなと思いました デフォルトの親bashで試してみたらperl入力で警告出ませんでした 環境変数のみ子プロセスに引き継がれるんですね

関連するQ&A

  • ターミナルの警告について教えてください

    MacOSX のPantherを使っています。 ターミナルを立ち上げるといつも以下のような警告文が表示されます。 どのようにすれば消えますでしょうか? Welcome to Darwin! perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = (unset), LANG = "ja-JP.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). ご教授よろしくお願いします。

    • ベストアンサー
    • Mac
  • シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2

    シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2...のような位置パラメタや、$?,$$,$!,$-のような特殊変数がありますが、これはPerlやRubyもあるようですが、意味や効果、やり方等は同じでしょうか。 当方はPHP,JavaScriptしか触れていませんし、PHPやJavaScriptは、そのような位置パラメタや特殊変数は見当たりませんでした…。 つまり、PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか。 こういった位置パラメタや特殊変数はPerlやRuby以外に他の言語にもありますでしょうか。PythonとかCとかJavaとか…。 また、Bシェルを学んでいる途中ですが、シェルスクリプトの中にはbourne以外にもbashやC Shell,zsh,Perlがありますが、何故Perlが入っているのでしょうか。 Perlをやっている方は別途シェルスクリプトをやる必要はないということでしょうか。

  • シェルスクリプト+perl

    シェルスクリプト中で1行だけperlを利用したいと思っています。 しかしシェルスクリプトで利用している変数をperlに持っていく方法が分からず悩んでいます。 ---------------------- #!/ban/bash hoge="hogehoge" perl -e ・・・ ←この中で$hogeを利用したい ---------------------- perlですべて書き直せばできるのですが、1行のためだけに、すべてを修正するのもどうかと思いましたので質問させていただきました。 もしご存知の方いらっしゃいましたらお教えください。

  • tcsh のプロンプト

    csh のプロンプトは % だと思うのですが、tcsh のプロンプトはデフォルトでは > なのでしょうか?ログインシェルを tcsh にしたのですが、プロンプトが % でないので、なんだか bash を使ってるような気分です。これやっぱり bash になってませんか? 環境は、FreeBSD です。

  • cygwinのtcshでパスが通らない

    現在、WINDOWS2000で、cygwinを使ってunixの環境を開発しておりますが、起動時のシェル(bash)をtcshに変更すると、今まで通っていたパスに通らなくなってしまいます。 環境変数には、ちゃんと設定しているんですが。。 どなたか、cygwinを使ってらっしゃる方、わかったら教えて頂けませんか?大変困っています。

  • シェルスクリプトについて

    とあるUNIXサーバが1台あるとします。 でそのマシン上の管理プログラムが同一マシン上にある 「シェルスクリプト(bash)」をキックするとします。 となるとそのシェルスクリプトの実行者(?)は Unixにログオンしているユーザーになるのでしょうか?。 目的としてはそのログインしているユーザーの環境変数 をシェルから参照したいのですが・・ 考え方がWindowsなもので。。すみませんが よろしくお願いします。

  • シェルスクリプトで配列が使えない

    シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たので、 以下のようなシェルスクリプトを作成したのですが、エラーが出てきてしまいます。 端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。 環境はubuntu 10.10、 GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu) です。 ---------------------- #!/bin/sh list=(`ls`) echo ${list[0]} ---------------------- 3:Syntax error: "(" unexpected

  • シェルスクリプト間で排他をとりたい

    環境 linux(redhat) 使用シェル bash シェルスクリプトAとシェルスクリプトBを作成し、 シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。 例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。 上記のような仕組みをシェルスクリプトで実現可能でしょうか? 基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 (シェルの異常終了時は、ロックが自動的に解放されることが望ましい) 上記のようなことをシェル(bash)で実現可能でしょうか。 bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。 (ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)

  • Linuxでの質問。(echoコマンドなど)

    Linuxでの質問。 1.echoコマンドで* $home=' home ' (ただし home はシェル変数homeの値)と表示したい。echoコマンドにどのようは引数を渡せばよいのでしょうか。 実行例 % echo 適切な引数 * $home='/home/gbu/myname' 答えは echo \* "\home="\'$home\' でよろしいですか。 echo \* '$home='\'$home\' と入力しても同じ結果が出るのですが、どっちでいいでしょうか。 2.次の2つのコマンドラインは実行結果が異なる。その違いが生じる理由は何でしょうか。 % cd ; (cd / ; pwd) ; pwd % cd ; cd / ; pwd ; pwd まったく初心者です。manコマンドを使って調べたのですが。。 man () って入力しても、何にも出なくて、ぜひ教えてください。お願いします。 3.演習課題にならって、 エイリアスが子プロセスのシェル(サブシェル)に引き継がれるかどうかを確かめる手順の例を示しなさい。っていう課題が出ました。どういうふうにやればいいでしょうか。教えてください。 演習課題 シェル変数と環境変数の違いの確認 % set foo=1 シェル変数fooに値を設定する。 % setenv FOO 1 環境変数FOOに値を設定する。 % echo $foo シェル変数fooの値を表示する。 % echo $FOO 環境変数FOOの値を表示する。 % tcsh 子プロセスとしてシェルを起動する。 (ここから、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値の表示を試みる。(引き継がれていない。) % echo $FOO 環境変数FOOの値を表示する。(引き継がれている。) % set foo=2 シェル変数fooに値を設定する。 % setenv FOO 2 環境変数FOOに値を設定する。 % exit 子プロセスとしてシェルを起動したシェルを終了する。 (ここまで、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値を表示する。(子プロセスでの変更は影響しない。) % echo $FOO 環境変数FOOの値を表示する。(子プロセスでの変更は影響しない。) エイリアスの意味を調べたのですが、「コマンドを別名で登録したもの」と解釈されていて、これはどういうことなんでしょうか。 この問題の意味は、課題にならって set alias=1 と設定して、次は setenv ALIAS 1 そして、課題のように、fooのとこをalias、FOOのとこをALIASと変えて、最後echo $ALIAS を調べればいいのですか。 学校の宿題ですが、やってもぜんぜん意味不明なので、助けてください。

  • シェルスクリプトの1行目に#!を書いてもダメなのはなぜ?

    test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。