タグ付けされた質問 「posix」

POSIXは、オペレーティングシステム間の互換性を維持するためにIEEEによって指定された規格のファミリであるPortable Operating System Interfaceの頭字語です。


4
POSIXとは正確には何ですか?
私は、ウィキペディアのページ次の抜粋に気づいまで..私はPOSIXはしばしば、どこでも言及見て、私はそれは、ベースラインのUNIX標準であると想定していた:ザ・オープン・グループ Open Groupは、UNIX商標の認定機関として最も有名であり、POSIX標準を拡張し、UNIXシステムの公式定義である Single UNIX Specification技術標準の公開です。 UNIXシステムの公式の定義がPOSIXの拡張である場合、POSIXとは正確には何ですか?、、、それは確かにUNIXの世界の試金石のようですが、全体像にどのように適合するのか分かりません。
139 posix  standard 

5
「関数foo(){}」と「foo(){}」の違い
キーワードbashを使用または省略して、関数を定義できますfunction。違いはありますか? #!/bin/bash function foo() { echo "foo" } bar() { echo "bar" } foo bar 関数の呼び出しfooとbar成功の両方で、違いは見当たりません。だから、読みやすさを改善するだけなのか、それとも私が見逃しているものがあるのか​​疑問に思っています... BTW dash(debian / ubuntuに/bin/shシンボリックリンクさdashれています)などの他のシェルでは、functionキーワードを使用すると失敗します。
96 bash  shell  function  posix 

5
進捗レポート/ログ情報はstderrまたはstdoutに属しますか?
進捗レポートとログ情報(「Doing foo; foo done」など)を印刷する場所に関する公式のPOSIX、GNU、またはその他のガイドラインはありますか?個人的には、標準エラー出力にリダイレクトして、プログラムの実際の出力のみを取得できるように、標準エラー出力に書き込む傾向があります。最近、進捗レポートは実際にはエラーではなく、エラーメッセージのみがstderrに出力されるため、これは良い方法ではないと言われました。 両方のポジションが理にかなっており、もちろん、あなたがしていることの詳細に応じてどちらかを選択することができますが、これについて一般的に受け入れられている標準があるかどうか知りたいです。POSIX、GNUコーディング標準、またはその他の広く受け入れられているベストプラクティスのリストに特定のルールを見つけることができませんでした。 同様の質問がいくつかありますが、これらは正確な問題に対処していません。 シェルスクリプトでstderrへのリダイレクトを使用する場合:受け入れられた答えは、私がする傾向があることを示唆しています。ただし、これはユーザーの意見として提示されていますが、引数によってサポートされています。 使用法メッセージはstderrまたはstdoutに送信する必要がありますか?:これはヘルプメッセージに固有ですが、GNUコーディング標準を引用しています。これは私が探している種類のもので、ヘルプメッセージだけに制限されていません。 それでは、進捗レポートやその他の情報メッセージ(プログラムの実際の出力の一部ではない)を印刷する場所に関する公式ルールはありますか?
75 posix  stdout  gnu  stderr  standard 

3
シェルスクリプトのPOSIX準拠をテストするにはどうすればよいですか?
POSIXはすべての大学の中で共通の標準に最も近いことを考えると、POSIXを排他的にサポートするシェルがあるかどうかを知りたいと思っています。最新のシェルのほとんどはPOSIXをサポートしています(そしてPOSIX準拠のスクリプトを問題なく実行します)が、非準拠の機能を指摘することはうまくいきません。 非準拠の機能に対してエラーをスローするような方法で、POSIXおよびPOSIXのみを実装するシェルはありますか? 編集ポータブルシェルスクリプトを書くための一般的なヒントを求めていないことを明確にしたい。コメントで言及された関連する質問は、すでにこれをカバーしています。この質問にbashは、--posixオプションがありますが、それが一部の初期化動作にしか影響しないことを発見したとき、私が探しているものではないことがわかりました。

3
`cd`外部コマンドのポイントは何ですか?
この詳細な回答で言及されているように、POSIXシステムcdにはシェルビルトインに加えて外部バイナリがあります。OS X 10.8上では、です/usr/bin/cd。cd独自の作業ディレクトリを変更するとすぐに終了するため、組み込みのようには使用できません。どんな目的に役立ちますか?

5
/ dev / stdin、/ dev / stdout、および/ dev / stderrの移植性はどのくらいですか?
時折、私は標準IOストリームの1つ(の「等価パス」を指定する必要がありstdin、stdout、stderr)。私は、Linuxで動作する時間の99%以来、私は先頭に追加/dev/取得する/dev/stdinなど、これが「思わ正しいことを行うために」。しかし、1つには、そのような理論的根拠について私はいつも不安でした(もちろん、うまくいかないまで「うまくいくようだから」)。さらに、私はこの操作がどれほどポータブルであるかについて良い感覚を持っていません。 そこで、いくつか質問があります。 Linuxののコンテキストでは、それが安全である(はい/いいえ)と同一視するstdin、 stdoutとstderrして/dev/stdin、/dev/stdoutと /dev/stderr? より一般的には、この同等性は「十分に移植可能」ですか? POSIXの参照が見つかりませんでした。

1
「rm。*」は親ディレクトリを削除しますか?
式.*はbashによって展開され、現在のディレクトリと親ディレクトリが含まれます。 $ ls -la total 2600 drwxrwxrwx 2 terdon terdon 2162688 Sep 10 16:22 . drwxr-xr-x 142 terdon terdon 491520 Sep 10 15:34 .. -rw-r--r-- 1 terdon terdon 0 Sep 10 16:22 foo $ echo .* . .. rm -rf .*GNU bashを使用してDebianで実行している場合version 4.2.36(1)-release、rmからrm (GNU coreutils) 8.13このメッセージが表示されます。 $ rm -rf .* …
53 shell  wildcards  rm  posix 


1
Unix / Linuxでオプション区切り文字の終わりとして二重ダッシュ(-)が導入されたのはいつですか?
歴史的な Unixや4.4BSDのような「最近」のシェル/ユーティリティは、オプションの区切り文字としてダブルダッシュ(または2つの連続したハイフン)の使用をサポートしていないと思います。ではFreeBSDでは、インスタンスのために導入されたノートを参照することができrm manページで2.2.1リリース(1997年)。しかし、これは1つのコマンドの単なるドキュメントです。 最古のを見るとGNUのfileutils のchangelog私は見つけることができる、私はこの参照1を(少し変更されました): Tue Aug 28 18:05:24 1990 David J. MacKenzie (djm at albert.ai.mit.edu) * touch.c (main): Don't interpret first non-option arg as a <--- time if `--' is given (POSIX-required kludge). * touch.c: Add long-named options. * Many files: Include <getopt.h> instead of "getopt.h" since getopt.h will …
49 history  posix  gnu  arguments 

8
POSIX必須ユーティリティがシェルに組み込まれていないのはなぜですか?
この質問の目的は、特定のコンピューティング問題を解決することではなく、好奇心に答えることです。問題は、なぜPOSIXの必須ユーティリティがシェル実装に組み込まれていないのですか? たとえば、基本的にいくつかの小さなテキストファイルを読み取り、それらが適切にフォーマットされていることを確認するスクリプトがありますが、かなりの量の文字列操作のために、マシンで実行するのに27秒かかります。この文字列操作は、さまざまなユーティリティを呼び出すことで数千の新しいプロセスを作成するため、速度が低下します。私はユーティリティのいくつかは、すなわち、中に建設された場合のことをかなり確信していますgrep、sed、cut、tr、およびexpr、スクリプトが第二に実行します以下(Cでの私の経験に基づきます)。 これらのユーティリティをビルドすると、シェルスクリプトのソリューションのパフォーマンスが許容範囲内であるかどうかが異なる場合が多いようです。 明らかに、これらのユーティリティをビルトインしないことを選択した理由があります。システムレベルで1つのバージョンのユーティリティを使用すると、そのユーティリティの複数の異なるバージョンがさまざまなシェルで使用されることがなくなります。私は本当に多くの新しいプロセスを作成するオーバーヘッドを維持するために他の多くの理由を考えることはできません。準拠しています。少なくとも非常に多くのプロセスを持つことの非効率性ほど大きな問題ではありません。

7
testまたは[または[[はbashシェル間および他のシェル間でより移植性がありますか?
できると思う $ [ -w /home/durrantm ] && echo "writable" writable または $ test -w /home/durrantm && echo "writable" writable または $ [[ -w /home/durrantm ]] && echo "writable" writable 3番目の構文を使用するのが好きです。それらはすべての点で、すべてのネガティブおよびエッジケースで同等ですか?移植性に違いはありますか?たとえば、UbuntuのbashとOS Xまたは古い/新しいbashバージョンの場合、たとえば4.0より前/後で、どちらも式を同じように展開しますか?

4
UNIX / POSIXシステムコールの命名がなぜ読みにくいのですか?
Unix やの場合、and やorのようなtimeandのcreat代わりに、多分もっと適切な、そのようなアンテリングシステムコール名を使用する理由は何ですか。それは次の点に私を連れて行きます:なぜ誰かがそれを読みやすくするためにキャメルケースや少なくともアンダースコアなしのようなものが欲しいのですか?もちろん、呼び出しにはより多くの文字が含まれますが、コードの可読性がより重要であることは誰でも知っていますか?getCurrentTimeSecscreateFileget_current_time_secscreate_filecfsetospeed

3
一部のアプリケーションが設定データに〜/ .config / appnameを使用し、他のアプリケーションが〜/ .appnameを使用するのはなぜですか?
一部のアプリケーションは構成ファイルを配置し~/.config/appname、他のアプリケーションはこれを使用します~/.appname(従来の方法、知る限り)。この区別の意味は何ですか?また、私のアプリケーションでは何を考慮すべきですか? 更新:私の(XUbuntu 11.10のデフォルト)$ XDG_CONFIG_HOMEが設定さ~/れ、システム内のほとんどのアプリケーション(Mozilla Firefox、Adobe Flash Player、Midnight Commander、Opera、Wineなど)がこれに準拠しているように見えます。しかし、代わりに使用するアプリケーション(Compiz、Deadbeef、VLC、Qt Creator、Google Chrome、XFCEなど)はまだ多くあります~/.config/。別の不審な点は、ディレクトリ~/.config/自体が隠されていないことです(名前にドットはありません)-アプリケーション構成ディレクトリは、場所($ XDG_CONFIG_HOME値)に依存せずに一定の独自の名前を持つことを期待されていませんか?

7
シバングの複数の引数
shebang行(#!)を介して実行可能ファイルに複数のオプションを渡す一般的な方法があるかどうか疑問に思っています。 私はNixOSを使用していますが、私が書くスクリプトの最初の部分は通常/usr/bin/envです。私が遭遇する問題は、その後に来るすべてがシステムによって単一のファイルまたはディレクトリとして解釈されることです。 たとえば、bashposixモードで実行されるスクリプトを書きたいとします。シバンを書く簡単な方法は次のとおりです。 #!/usr/bin/env bash --posix ただし、結果のスクリプトを実行しようとすると、次のエラーが生成されます。 /usr/bin/env: ‘bash --posix’: No such file or directory 私はこの投稿を知っていますが、より一般的でクリーンなソリューションがあるかどうか疑問に思っていました。 編集:Guileスクリプトには、マニュアルのセクション4.3.4に記載されている、目的を達成する方法があることを知っています。 #!/usr/bin/env sh exec guile -l fact -e '(@ (fac) main)' -s "$0" "$@" !# ここでのトリックは、2番目の行(で始まるexec)がコードとして解釈されますshが、#!... !#ブロック内にあるため、コメントとして解釈されるため、Guileインタープリターによって無視されることです。 このメソッドをインタープリターに一般化することはできませんか? 2番目の編集:少し遊んだ後、から入力を読み取ることができるインタープリターのstdin場合、次のメソッドが機能するようです: #!/usr/bin/env sh sed '1,2d' "$0" | bash --verbose --posix /dev/stdin; exit; ただし、sh通訳が仕事を終えるまでプロセスは存続するため、おそらく最適ではありません。フィードバックや提案をいただければ幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.