set -o posixやset -tの効果について調べています

このQ&Aのポイント
  • set -o posixはbashの動作をPOSIX 1003.2に準拠させるオプションです。
  • set -t(-o onecmd)はコマンドを1つ読み込んで実行後に終了するオプションです。
  • set -tを実行した瞬間にログアウトするのは正常な挙動であり、シェルスクリプト内ではset -t以下のコマンドは実行されません。
回答を見る
  • ベストアンサー

set -o posixやset -tの効果

setのオプションを調べています。 解説を読んでも意味不明なものがほとんどですが、 中には、もう少しヒントをもらえれば理解できそうなものがあります。 次の2つのオプションについて教えてください。 set -o posix: これは解説ではbashの動作をPOSIX 1003.2に準拠させるとありました。 bashの開発方針はもともとPOSIXに準拠するようになっているため、 set -o posixを実行しても挙動の違いが確認できません。 ですので、どのようなコマンドを実行した場合に標準のbashと挙動が異なるか発見した方は教えてください。 set -t(-o onecmd): これは解説ではコマンドを1つ読み込み、実行後、終了するとありました。 私はset -t実行後の最初のコマンド実行後に終了すると予想していたのですが、 実際に試してみると、set -tを実行した瞬間にログアウトしてしまったのです。 これが本来の挙動なのでしょうか。 もし、これが本来の挙動なのであれば、どのような目的でこのような挙動が実装されたのかご存知のかたは教えてください。 もし、私の予想通り、オプション設定後、1個はコマンドを実行できるのだとすれば、 それはどのようにやればよいのか教えてください。 シェルスクリプトを作成しても、set -t以下のコマンドは一切実行されず、シェルに戻ってしまいました。

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

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

>Leanさん、もしこれの日本語訳のサイトをお知りでしたらおしえてください。 それの日本語訳は検索して見つからなかったので。 指定したURLのページを翻訳してくれるサービスもあるからそれで日本語訳してみたら、雰囲気ぐらいは分かるかも。

zyousuke
質問者

お礼

Leanさん、ご返信ありがとうございます。 知っているページを紹介してくれるのではなく、わざわざ探してもらっていたとは知りませんでした。 私も最近は質問する前に、なるべく自力で調べる努力をしているつもりなのですが、さすがに海外のサイトまで調たことはありませんでした。 今回ご紹介いただいたサイトを、翻訳ソフトで調べながら、ちょっとずつ読んでいきます。 標準bashとPOSIX準拠bashの違いが何か1個でも分かったら補足欄を使用してご報告しますので、気長にお待ちください。

zyousuke
質問者

補足

Leanさん、やっぱり無理でした。 降参します。 bashの日本語版マニュアルでさえ理解できない箇所が多々あるというレベルの人間が、英語版のマニュアルを解読するためには相当根気が必要だと思いました。 man bashでbashの日本語版マニュアルを閲覧したところ 「posixモードで動作していれば、PATH中でファイルを見つけられなかった場合には、カレントディレクトリが検索されます」 とう記述を発見し、試してみたのですがダメでした。 すなわちset -o posixを実行してもファイル名だけでカレントディレクトリ中のコマンドを実行することはできませんでした。 これは私のリナックスが古いせいかもしれません。 Leanさんのレッドハット9ならできるかも・・・。 ↑試してと言わんばかりの記述ですがw そういうわけで、setコマンドの調査はここらで中断して、 先を読み進めたいと思います。 一冊の本を読み終えるのに本当時間がかかりすぎていますw

その他の回答 (1)

  • Lean
  • ベストアンサー率72% (435/603)
回答No.1

>set -o posix: >これは解説ではbashの動作をPOSIX 1003.2に準拠させるとありました。 >bashの開発方針はもともとPOSIXに準拠するようになっているため、 >set -o posixを実行しても挙動の違いが確認できません。 >ですので、どのようなコマンドを実行した場合に標準のbashと挙動が異なるか発見した方は教えてください。 Bash Reference Manual  6.11 Bash POSIX Mode  http://www.gnu.org/software/bash/manual/bashref.html#SEC85

zyousuke
質問者

お礼

Leanさん、早速のお返事ありがとうございます。 っと、げげっ! ご紹介いただいたページはbashの英文マニュアルでしょうか。 これを読解するのは、私にはたぶん無理です。 人が書いた数十行のスクリプトさえ、読むのにやたら時間がかかるレベルですから・・・。 トップページに日本語訳へのリンクがないか確認してみたのですが、ここは硬派な本場サイトでした・・・。 Leanさん、もしこれの日本語訳のサイトをお知りでしたらおしえてください。 最新版でなくても全然気にしませんので

関連するQ&A

  • [シェルスクリプト内で bashコマンド後のコマンドが実行されない]

    [シェルスクリプト内で bashコマンド後のコマンドが実行されない] 以下の様にシェルスクリプトを記述するとコマンド2が実行されません。 #! /bin/sh コマンド1 bash コマンド2 bash環境でコマンド2を実行させるにはどうしたら良いのでしょうか?

  • DB2のbindコマンドの"+o""-o"オプションについて

    DB2のbindコマンドの"+o""-o"オプションについて お世話になっております。 DB2のバインドコマンドのオプションについてご教授いただきたく、投稿いたしました。 現在DB2のバインドを実施している既存のシェルを仕様書に起こす作業を実施しております。 その中でbindに使用しているオプションがどのような機能をもっているかわかりません。 (infomation centerにも載っておりませんでした。) どなたかDB2に詳しい方、ご教授お願いいたします。 【質問】 db2のbindコマンドの"+o"オプションと"-o"オプションがどのような機能をもっているか 【バージョン】 DB2 v8.1

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

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

  • シェルスクリプトのbashとperlについて

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

  • Macでシェルスクリプト実行時にターミナルを非表示にしたい

    こんにちは、よろしくお願いします Macでシェルスクリプトを実行する際にターミナルを表示させないもしくはシェルスクリプト終了後ターミナルを終了させたいのですが、その方法が解りません ターミナルの環境設定でシェルの終了時:シェルが正常に終了した場合閉じるになっています 実行しているスクリプトはごく簡単な以下のような1行ものです #!/bin/bash open smb://192.168.1.10/d ご存知の方ご教授お願いします OSX10.5です よろしくお願いいたします

    • 締切済み
    • Mac
  • シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。

    シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。 ファイル名を変更するシェルスクリプトをbashで行おうとプログラムを作成したのですが、 実行するとbad interpreter: ディレクトリではありません とメッセージが出て終了します。記述に誤りがあるのか、実行の仕方が悪いのか分かりません。教えて下さい。 シェルの記述内容は ファイル名をtest.sh #!/bin/bash/ -f mv A.txt A.ori exit 実行方法として #>chmod x+a test.sh #>./test.sh で行いました。そうしたら、bad interpreter: ディレクトリーではありません とメッセージが出ます。 ちなみに #>. test.sh で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。

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

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

  • bashで変数にパイプを入れ、コマンドとして使う?

    パイプを含む文字列が入った変数をシェルコマンドとして実行する方法がありましたら 教えてください。 Linux環境で、bashを使って定期的にモニタリングするスクリプトを書こうとしています。 スクリプトの引数で実行するモニタリングコマンドを変えれるようにしたいのですが、 パイプが入っているとうまくいきません。 下記のようなスクリプトで、引数に "ps -ef | grep pty" と入れたら、定期的に そのようなコマンドを実行できるようにできますでしょうか? (引数指定時に、きちんとクォーテーションで全体を囲んで、パイプが評価されない ようにしてもダメでした。) 変数として入ったコマンドを実行するときに、パイプがシングルクォーテーションで 囲まれて "ps -ef '|' grep pty" のようになってしまい、パイプとして実行時に認識 されないようです。 bashシェルで設けてる制約でしょうか?回避策などありますでしょうか? <<スクリプト poll.sh>> ## # Defs export RUNCMD='finger' export INTERVAL=10 ## # Getopt while getopts "t:" OPT; do case ${OPT} in t) INTERVAL=${OPTARG};; esac done shift $((OPTIND-1)) [ ${#} -gt 0 ] && RUNCMD="${*}" ## # Main part while :; do (set -x; ${RUNCMD}; sleep ${INTERVAL}); done

  • bashシェルスクリプトで空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

    bashのシェルスクリプトで #!/bin/bash -x CMD=/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart $CMD としたのですが2行目で既にコマンドが実行されてしまいます。 空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

  • シェルスクリプト bashのtestコマンドが動きません

    こんにちは、ど素人なのにシェルスクリプト仕事で書かされ苦しんでます。 SUN-solaris8で動作したシェルをLinuxE3.0へ移動させたら testコマンドでエラーになりました。 SUN-solaris8ではbsh LinuxE3.0ではbashです。 test -s file名は両方で認識するようですが、 test -s ../directory名/file名で指定して 実行するとSUNでは動作したのですが Linuxではわけの分からないメッセージが出て終了。 Linuxで % sh と打つと/bin/bash % test と打つと /XXX/usr/binだったかな?パス忘れました。 % man bashでマニュアル見るとtestは[]で囲め?   英語だから良く分からなかった。   疲れたので今日は諦めました。 testコマンドで良い解決法ご教示願います。 情報が不足なら指摘いただいた物を追加いたします。