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

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


2
現在の小数点記号はどれですか?
POSIXシェルスクリプトがあるとします。 私が管理していないさまざまなシステム/環境で実行する必要がある ロケール設定を尊重するプログラムによって出力される文字列から小数点記号を削除する必要があります。 最も一般的な方法で小数点区切り文字を検出するにはどうすればよいですか?

3
システムファイルは小文字である必要がありますか(POSIXなど)、標準の一部ですか?
私の会社は、ブランド名が大文字と小文字が混在するアプリケーション(「ApplicationName」など)を再販しています。 アプリケーションのインストーラーは、この標準ですべてのパスとファイル名を作成します。例えば、メインディレクトリは/opt/ApplicationName、initファイルが呼び出されるApplicationNameので、実行するservice ApplicationName status必要があります。 私にとって、これはすべての賢明な慣習を破り、ファイルとディレクトリはすべて小文字である必要があると感じています(ファイルやディレクトリがすべて呼び出されるMySQLなどの他のアプリケーションでは先例がありmysql、ApacheやTomcatのようなアプリケーションでも前のものは廃止されます大文字)。 これをバグ報告として提起する場合、「間違っていると思う」だけでなく、より強力な議論をしたいと思います。それで、POSIX標準のようなもので、このようなシステムファイルは小文字でなければならないと言われていますか?

11
シェルが「猫の無駄な使用」を自動的に修正しないのはなぜですか?[閉まっている]
多くの人々は、ラインに沿ってコードを含むonelinersとスクリプトを使用します cat "$MYFILE" | command1 | command2 > "$OUTPUT" cat技術的には/usr/bin/cat、コマンドが実行された場合にこれを回避できる新しいプロセス(多くの場合)を開始する必要があるため、最初は「catの無駄な使用」と呼ばれます。 < "$MYFILE" command1 | command2 > "$OUTPUT" シェルは起動するcommand1だけでstdin、指定されたファイルをポイントするだけです。 シェルがこの変換を自動的に行わないのはなぜですか?「猫の無用な使用」構文は読みやすく、無用な猫を自動的に取り除くのに十分な情報がシェルにあるはずです。catシェルはパスにバイナリを使用する内部代わりに、それを実装することができなければならないので、POSIX規格で定義されています。シェルには、1つの引数バージョンのみの実装と、パス内のバイナリへのフォールバックさえ含めることができます。

4
シェルは無駄な終了コマンドを最適化することを許可されていますか?
シェルは、などの終了することがわかっているおそらく役に立たない(または部分的に役に立たない)コマンドを実行するように要求された場合、cat hugeregularfile.txt > /dev/nullそのコマンドの実行をスキップできますか (または、より安価な同等のコマンドを実行できtouch -a hugeregularfile.txtますか?) より一般的には、外部で観察可能な動作が抽象マシンが評価した場合に限り、ソースコードに変換を実行できるという点で、シェルはCコンパイラに似ていますか? 編集 Nota Bene:当初提起された私の質問には、シェルがこれらの最適化を行うことが許可されているかどうか、またはそれらを行うことができる実装が存在するかどうかではなく、尋ねられました。理論は実践よりも理論に興味がありますが、どちらも大歓迎です。

2
プロセス置換を実現するポータブル(POSIX)の方法は何ですか?
などの一部のシェルは、次のようbashにプロセス出力をファイルとして表示する方法であるプロセス置換をサポートしています。 $ diff <(sort file1) <(sort file2) ただし、この構造はPOSIXではないため、移植性がありません。どのように達成される置換を処理することができPOSIXにやさしい方法(で動作すなわち1 /bin/sh)? 注:質問は、ソートされた2つのファイルをどのように比較するかを尋ねているのではありません-これは、プロセス置換を示すための不自然な例です!

3
shellcheckはbasenameを使用しないことを推奨しています:なぜですか?
shellcheckを試しています。 私はそのようなものを持っています basename "${OPENSSL}" そして、私は次の提案を受け取ります Use parameter expansion instead, such as ${var##*/}. 実用的な観点からは、違いは見当たりません $ export OPENSSL=/opt/local/bin/openssl $ basename ${OPENSSL} openssl $ echo ${OPENSSL##*/} openssl 以来basenameであるPOSIX仕様、私はそれがベストプラクティスであるべき理由はない理由を行います。ヒントはありますか?

4
特定の行でのOSX挿入のsed
だから私はしばらくの間linuxで 'sed'を使用していましたが、 'POSIX sed'と 'GNU sed'には多くの小さな違いがあるため、OSXで使用するのに少し苦労しました。現在、特定の行番号の後にテキスト行を挿入する方法に苦労しています。(この場合、4行目) Linuxでは、次のようなことをします。 sed --in-place "4 a\ mode '0755'" file.txt OSXでこれを試しました: sed -i "" "4 a\ mode '0755'" file.txt ただし、これにより、「コマンドの最後にある\の後の余分な文字」エラーが表示され続けます。ここで何が間違っているのでしょうか?タイプミスはありますか?または、sedのバージョン間の別の違いを理解していないのですか?
24 sed  osx  posix  gnu 

1
POSIXとGNU rmはいつ/を削除しないのですか?
数年前から、GNU rmユーティリティはオプションで/呼び出されない限り削除されません--no-preserve-root。しかし、コマンドrm -rf /は非常に長い間危険であるとして集団潜在意識に留まっており、人々はまだそれを「怖い」コマンドとして引用することがよくあります。 rm削除できないこのルールが/最初に登場したのはいつかと思っていました。POSIXの仕様を確認したところ、POSIX:2008にはこの安全機能が含まれていますが、POSIX:2001には含まれていません。POSIX仕様のオンラインバージョンは随時更新されるため、新しいサブリリースごとにウェイバックマシンもチェックし、2010年からPOSIX:2008の関連ページを見つけ、rm削除できないルールを確認することができました。/すでにリストされていました。 だから、私の質問は: rm削除できないルールが/POSIX仕様に追加されたのはいつですか?Single UNIX Specificationバージョン4の元の2008エディションにあったのですか、それともリビジョンに追加されたのですか この制限はいつGNUに追加されましたrmか?POSIXに追加される前のことだと確信していますが、いつそれが起こりましたか?
23 rm  posix  history  gnu 

4
ユーザーIDに関連付けられたユーザー名を取得するPOSIX互換の方法
ユーザーIDに関連付けられたログイン名を取得したいことがよくあります。これは一般的なユースケースであることが証明されているため、これを行うシェル関数を作成することにしました。私は主にGNU / Linuxディストリビューションを使用していますが、スクリプトをできるだけ移植性のあるものに書き、自分がやっていることがPOSIX互換であることを確認しようとしています。 解析 /etc/passwd 私が試みた最初のアプローチは、/etc/passwd(を使用してawk)解析することでした。 awk -v uid="$uid" -F: '$3 == uid {print $1}' /etc/passwd ただし、このアプローチの問題は、ログインがローカルではない可能性があることです。たとえば、ユーザー認証はNISまたはLDAPを介して行われる可能性があります。 getentコマンドを使用する を使用するgetent passwdと、/etc/passwd非ローカルのNISまたはLDAPデータベースも照会されるため、解析よりも移植性が高くなります。 getent-ウィキペディア getent(1)-Linux manページ getent passwd "$uid" | cut -d: -f1 残念ながら、getentユーティリティはPOSIXで指定されていないようです。 idコマンドを使用する id ユーザーのIDに関するデータを取得するためのPOSIX標準化ユーティリティです。 BSDおよびGNU実装は、オペランドとしてユーザーIDを受け入れます。 id(1)-OpenBSDのマニュアルページ id(1)– FreeBSD manページ GNU Coreutils:ID呼び出し これは、ユーザーIDに関連付けられたログイン名の印刷に使用できることを意味します。 id -nu "$uid" ただし、オペランドとしてユーザーIDを指定することはPOSIXでは指定されていません。オペランドとしてのログイン名の使用についてのみ説明します。 上記のすべてを組み合わせる 上記の3つのアプローチを次のように組み合わせることを検討しました。 get_username(){ uid="$1" …
23 users  posix 

2
POSIXは標準ユーティリティへのパスを保証しますか?
Cから、標準ユーティリティ(psなど)を実行する最も簡単な方法は何ですか? POSIXは、たとえば、標準psが存在することを保証していますか、/bin/psまたはPATH環境変数を取得した値にリセットしてから、PATH confstr(_CS_PATH, pathbuf, n);検索でユーティリティを実行する必要がありますか?
22 path  c  posix  exec 

2
ファイルがPOSIXで定義されたテキストファイルであるためには、どのような条件を満たす必要がありますか?
POSIXは、テキストファイルを次のように定義します。 0個以上の行に編成された文字を含むファイル。行にはNUL文字が含まれておらず、<newline>文字を含めて、長さが{LINE_MAX}バイトを超えることはできません。POSIX.1-2017はテキストファイルとバイナリファイルを区別しませんが(ISO C標準を参照)、多くのユーティリティは、テキストファイルを操作する場合にのみ予測可能または意味のある出力を生成します。このような制限がある標準ユーティリティは、STDINまたはINPUT FILESセクションで常に「テキストファイル」を指定します。 ソース:http : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403 ただし、いくつか不明確なことがあります。 テキストファイルは通常のファイルである必要がありますか?上記の抜粋では、ファイルが通常のファイルでなければならないことを明示的に示していません 1つの文字と1つの文字のみ(つまり、改行で終わらない単一の文字)が含まれている場合、ファイルをテキストファイルと見なすことはできますか?この質問はきちんと聞こえるかもしれませんが、「1つ以上の文字」ではなく「文字」という言葉を使用しています。他の人は同意しないかもしれませんが、「1つ以上の文字」を意味する場合は、明示的に言う必要があると思います 上記の抜粋では、「行」を参照しています。名前に「空の行」、「表示行」、「不完全な行」、「行」という名前の行がある4つの定義が見つかりました。「空」、「表示」、「不完全」が省略されているため、「行」を意味すると推測するのか、またはこれらの定義の4つすべてが上記の抜粋の行と見なされているのですか? このテキストブロックの後に来るすべての質問は、「文字」が「1つ以上の文字」を意味するという推論に依存しています。 ファイルが空の場合、1つ以上の文字が含まれていないため、テキストファイルではないと推測できますか? このテキストブロックの後に来るすべての質問は、上記の抜粋では、行が「行」として定義され、名前に「行」を含む他の3つの定義は除外されるべきであるという推論に依存します: 「ゼロ行以上」の「ゼロ」は、改行で終わらない1つ以上の文字が含まれているファイルがテキストファイルと見なされることを意味しますか? 「ゼロ以上の行」とは、1つの「行」(0以上の文字と終了する改行)が登場すると、最後の行が「不完全な行」(1つ以上の非行ファイルの最後の改行文字)? 「なし[行なし]は、改行文字を含めて{LINE_MAX}バイトを超えることはできません」とは、テキストファイル内の特定の「行」で許可される文字数に制限があることを意味しますかUbuntu 18.04およびFreeBSD 11.1のLINE_MAXは「2048」ですか?
22 files  posix  text 

2
ターゲットアプリケーションのゼロ番目の引数を設定するPOSIXの方法はありますか?
でbash使用exec -aするzshことができ、代わりにARGV0特定のゼロ引数でプログラムを実行するように設定することもできますが、POSIXの方法もありますか? この1つのコメントで示唆されているように、これを達成するための(一時的な)シンボリックリンクを作成できますが、この方法では、新しいゼロ番目の引数値を真に任意の値、たとえば特定の絶対パスを持つコマンドに設定できませんでした。他の解決策はありますか?

1
POSIXは、コマンド置換内の引用されたヒアドキュメントに何を必要としますか?
で、この質問の誰かが使用して問題を報告し、ここで文書を内部に引用された区切り文字の単語で$(...)コマンド置換バックスラッシュ、\文書トリガーの内部の行末の改行結ぶラインの継続が、ここでは同じながら、文書外予想通りコマンド置換の作品を。 簡単なドキュメントの例を次に示します。 cat <<'EOT' abc ` def ghi \ jkl EOT これには、行末に1つのバックティックと1つのバックスラッシュが含まれます。区切り文字は引用符で囲まれているため、本体内で展開は発生しません。すべてのBourne-alikesで、これはコンテンツを逐語的に出力します。次のようにコマンド置換内に同じドキュメントを配置した場合: x=$(cat <<'EOT' abc ` def ghi \ jkl EOT ) echo "$x" その後、それらは同じ動作をしなくなります。 dash、ash、zsh、ksh93、BusyBoxのはash、mksh、とSunOS 5.10 POSIXは、sh以前のように、すべて、文書の逐語的な内容を与えます。 Bash 3.2では、一致しないバックティックに対して構文エラーが発生します。一致したバックティックを使用して、コマンドとしてコンテンツを実行しようとします。 Bash 4.3は、「ghi」と「jkl」を1行にまとめますが、エラーはありません。--posixオプションでは、この影響を与えません。Kusalananda はpdksh、同じように振る舞うと言っています(ありがとう!)。 元の質問で、これはBashのパーサーのバグだと言いました。それは...ですか?[更新:yes ] POSIXからの関連テキスト(すべてシェルコマンド言語定義から)は、次のとおりです。 §2.6.3コマンドの置換: $(command)形式では、開き括弧から対応する閉じ括弧までのすべての文字がコマンドを構成します。commandには、任意の有効なシェルスクリプトを使用できます。ただし、不特定の結果を生成するリダイレクトのみで構成されるスクリプトは除きます。 §2.7.4ヒアドキュメント: 単語の一部が引用されている場合、区切り文字はwordの引用削除を実行して形成され、ヒアドキュメントの行は展開されません。 §2.2.1エスケープ文字(バックスラッシュ): <バックライン>の後に<改行>が続く場合、シェルはこれを行の継続と解釈します。<backslash>と<newline>は、入力をトークンに分割する前に削除されます。 §2.3トークンの認識: 場合io_hereトークンが文法によって認識されている(シェル文法を、一つ以上のすぐ隣次以降の行の)改行が一つ以上のここで、ドキュメントの本体を形成トークンとの規則に従って解析されなければなりませんHere-ドキュメント。 io_hereを処理していない場合、シェルは、入力内の次の文字に以下の最初の適用可能なルールを適用することにより、入力をトークンに分割します。... ... 現在の文字が<バックスラッシュ>、一重引用符、または二重引用符であり、引用されていない場合、引用されたテキストの最後までの後続の文字の引用に影響します。引用のルールは、引用で説明されています。トークンの認識中、実際には置換は行われず、結果のトークンには、入力に含まれる文字(<newline>を除く)が含まれます。引用テキストの。 これについての私の解釈は$(、終了するまでのすべての文字が)逐語的にシェルスクリプトを構成するということです。ヒアドキュメントが表示されるため、ヒアドキュメントの処理は通常のトークン化の代わりに行われます。ヒアドキュメントには、引用符で囲まれた区切り文字があり、その内容は逐語的に処理されます。エスケープ文字が含まれることはありません。しかし、このケースは単に対処されておらず、両方の動作が許容されるという議論を見ることができます。関連するテキストをどこかでスキップした可能性もあります。 この状況は他の場所でより明確になっていますか? (理論上)移植可能なスクリプトは何に依存できるはずですか? …

1
マルチスレッドLinuxプロセスがシグナルを受け取るとどうなりますか?
Unix(Posix)プロセスがシグナルを受信すると、シグナルハンドラが実行されます。 マルチスレッドプロセスではどうなりますか?どのスレッドがシグナルを受信しますか? 私の意見では、シグナルAPIはそれを処理するように拡張する必要があります(つまり、シグナルハンドラのスレッドを決定できるはずです)が、Linuxカーネルのメーリングリストやさまざまなフォーラム。私が理解したように、Linusの概念はPosix標準とは異なり、最初にいくつかの互換レイヤーが構築されましたが、現在ではLinuxはposixモデルに従います。 現在の状態は何ですか?

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