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

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

2
POSIXシェルスクリプトで算術ループを作成するにはどうすればよいですか?
で算術forループを作成する方法を知っていますbash。 POSIXシェルスクリプトで同等のループを実行するにはどうすればよいですか? 同じ目標を達成するにはさまざまな方法があるため、自由に独自の答えを追加し、それがどのように機能するかを少し詳しく説明してください。 このようなbashループの例を次に示します。 #!/bin/bash for (( i=1; i != 10; i++ )) do echo "$i" done

1
POSIX sedは、アドレス範囲が既に削除された行から始まる `1d; 1,2d`に何を必要としますか?
この質問へのコメントで、さまざまなsed実装がかなり単純なプログラムで同意しない場合があり、私たち(または少なくとも私)は、仕様が実際にそれに対して必要とするものを決定できませんでした。 問題は、削除された行から始まる範囲の動作です: 1d;1,2d そのコマンドに到達する前に範囲の開始が削除された場合でも、行2を削除する必要がありますか?私の当初の期待はBSD sedに沿って「いいえ」でしたが、GNU sedは「はい」と言っており、仕様テキストをチェックしても問題は完全には解決しません。 私の予想に一致するのは、(少なくとも)macOSとSolaris sed、およびBSD sedです。反対は(少なくとも)GNUとBusybox sedであり、多くの人々がここにいます。最初の2つはSUS認定で、他の2つはより普及している可能性があります。どの動作が正しいですか? 2アドレス範囲の仕様書には次のように記載されています。 sedのコマンドは、次のサイクルが終了しますかを開始するまでのユーティリティはその後、順番にそのアドレスがそのパターンスペースを選択するすべてのコマンドを適用しなければなりません。 そして 2つのアドレスを持つ編集コマンドは、最初のアドレスに一致する最初のパターンスペースから2番目のアドレスに一致する次のパターンスペースまでの包括的な範囲を選択します。[...]選択した範囲に続く最初の行から開始して、sedは最初のアドレスを再度探します。その後、プロセスが繰り返されます。 おそらく、ライン2がある 範囲内にかかわらず開始点が削除されたかどうかの、「第二に一致する次のパターン空間を介して第1のアドレスと一致する第1のパターン領域からの包含範囲」。一方、私は最初dが次のサイクルに移動し、範囲に開始する機会を与えないことを期待していました。UNIX™認定の実装は、私が期待したことを実行しますが、仕様で要求されていることを潜在的に実行しません。 いくつかの実例となる実験が続きますが、重要な問題は、削除された行で範囲が始まるときに何をすべき sedかです。 実験と例 問題の簡単なデモンストレーションはこれです。これは、行を削除するのではなく、余分なコピーを印刷します。 printf 'a\nb\n' | sed -e '1d;1,2p' これは、提供するsed入力の2行、aおよびb。プログラムは2つのことを行います。 で最初の行を削除し1dます。dコマンド意志 パターンスペースを削除し、次のサイクルを開始します。そして 各行が受け取る自動印刷に加えて、1から2までの行の範囲を選択して明示的に印刷します。したがって、範囲に含まれる行は2回表示されます。 私の期待は、これが印刷されることでした b ただ、1,21行目で到達できないため(d次のサイクル/行に既にジャンプしているため)範囲aが適用されず、範囲の包含は決して開始されず、削除されます。SolarisおよびBSDの一般的なsed非POSIXと同様に、macOSおよびSolaris 10 の準拠するUnixがこの出力を生成します。sedsed 一方、GNU sedは印刷します b b 範囲を解釈したことを示します。これはPOSIXモードでもそうでない場合でも発生します。Busyboxのsedは同じ動作をします(ただし、常に同じ動作とは限らないため、共有コードの結果ではないようです)。 さらなる実験 printf 'a\nb\nc\nd\ne\n' | sed -e '2d;2,/c/p' printf 'a\nb\nc\nd\ne\n' | …
11 sed  posix 

3
POSIX shで-nt / -otテストを実行する
ビルトインtestおよび[ユーティリティは、シェルが「POSIXモード」で実行されている場合でも、ほとんどのシェルで-nt(「より新しい」)および-ot(「より古い」)テストを実行します(同じ名前の外部ユーティリティについても当てはまります)。私がアクセスできるシステム)。これらのテストは、2つのファイルの変更タイムスタンプを比較するためのものです。文書化されたセマンティクスは、実装ごとにわずかに異なります(一方または他方のファイルが存在しない場合に発生することに関して)が、POSIX仕様にtestは含まれていません。以下のためのユーティリティ。 test条件付きコマンドが[KornShell]シェルから削除されたとき、testユーティリティの歴史的な実装に組み込まれたユーティリティに含まれていないため、ユーティリティに引き継がれませんでしたsh。 /bin/shシェルスクリプト内のファイル間の変更タイムスタンプを比較し、次に、1つのファイルが他のファイルより新しいかどうかに応じてアクションを実行したいと仮定します。 if [ "$sigfile" -nt "$timestamp" ] || [ "$sigfile.tmp" -nt "$timestamp" ] then return fi ... make(スクリプトの残りの部分は控えめに言っても扱いにくくなる)以外に、他にどのユーティリティを使用できますか?または、「歴史的な実装」でスクリプトを実行shしたり、特定のシェルの作成を辞めたりする人は誰もいないと仮定する必要がありbashますか?
11 files  timestamps  posix  test 

2
posixはどの文字エンコーディングをサポートしていますか?
POSIXは、次のようなツールの動作を定義しgrep、awk、sed、などのテキストファイルに対してどの作品。テキストファイルなので、文字エンコードの問題があると思います。 質問: POSIXでサポートされている文字エンコーディングは何ですか?(または、POSIXコンピアントシステムで処理できるエンコーディングのテキストファイル?)

2
サブシェルは子シェルと同じです
この2つの名前があります。サブシェルと子シェルです。 はい、子プロセスは次のいずれかによって開始されます: sh -c 'echo "Hello"' ( echo "hello" ) echo "$(echo "hello") echo "hello" | cat すべて同等で、同じ名前を共有していますか?すべて同じプロパティを共有していますか? POSIXには次の定義があります。 シェル実行環境は...で構成されています。 しかし、上記のリンクの最後の段落にはこれがあります: サブシェル環境は、無視されないシグナルトラップがデフォルトのアクションに設定されることを除いて、シェル環境の複製として作成されます。 そして特に: コマンド置換、括弧でグループ化されたコマンド、および非同期リストは、サブシェル環境で実行されます。さらに、マルチコマンドパイプラインの各コマンドはサブシェル環境にあります。.... sh -c 'echo "Hello"'そこに含まれていない、それもサブシェルと呼ばれるべき?

2
正規表現で[[.ch。]]はどういう意味ですか?
代替タイトル:POSIX準拠の正規表現の「照合シーケンス」または「照合要素」とは何ですか? 正確な技術的定義はPOSIX仕様のセクション9.3.5でリストの項目4として見つかりましたが、私にはあまり明確ではありません。 私は例と説明については、ウェブ上の周りGoogleで検索していない思い付い完全に手ぶらで、間違いなくありません啓発します。 私が得た唯一のことは、特定の状況では、長さを比較し、「最長一致」が何であるかを決定するために、正規表現に複数の文字を単一の文字として処理させることができるということです(正規表現は貪欲であり、可能な限り最長の一致を返します)。 それだけですか?使い方がわからないのですが、理解が不十分だと思います。 正規表現の「照合」とは実際には何ですか? そして[[.ch.]]、POSIX仕様の例であるは、これとどのように関連していますか?

2
grep(1p)マンページを開く方法は?
の終わりにman grep、それは言う SEE ALSO\ POSIX Programmer's Manual Page grep(1p). マンページを開くことができませんgrep(1p)。それ、どうやったら出来るの?ネット、Unix.SEを検索し、試行錯誤しましたが、まだ運がありませんでした。 試しました $ man 1p grep $ man -K grep 編集: 私はUbuntu 14.10を使用しています
11 grep  man  posix 

2
Linux / POSIXにlchownがあるのにlchmodがないのはなぜですか?
これは、Linuxがサポートしてシンボリックリンク(すなわちの所有者を変更するようだlchown)が、シンボリックリンクのモード/許可を変更する(つまりlchmod)されるサポートされていません。私が見る限り、これはPOSIXに準拠しています。ただし、これらの操作のどちらか一方だけをサポートするのではなく、両方をサポートする理由がわかりません。この背後にある動機は何ですか?

1
「find -exec cmd {} +」が「{} +」で終わる必要があるのはなぜですか?
序文:-exec {} \;&の違いを理解しました-exec {} +。私もそのような問題はありませんが、のセマンティクスに興味がありfindます。 終了する場合-execと、引数+の代わりに;、我々は必要でこれを終了するには{} +、たとえば、: # FreeBSD find $ find . -type f -exec cp {} /tmp + find: -exec: no terminating ";" or "+" # GNU find is even more cryptic: $ find: missing argument to `-exec' ;これらの例の代わりに使用することは+問題なく動作します(ただし、明らかに他のことを行います)。 POSIXから: -exec utility_name [argument ...] ; -exec utility_name [argument …
11 find  history  posix 

2
「。」を使用しても大丈夫ですか?ソースの代わりにファイルを実行するには-UbuntuとOS Xの.bashrcで?
OK、そのsource現在のシェルでスクリプトを実行し、.別途、で詳述するように「」とし、 『ソース』でスクリプトを実行している私には、具体的には、例えば、しかし、.bashrcファイル、私が持っています: [ -f ~/.bash_aliases ] && source ~/.bash_aliases [ -f ~/.git-completion.bash ] && source ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh これを次のように置き換えることはできますか? [ -f ~/.bash_aliases ] && . ~/.bash_aliases [ -f ~/.git-completion.bash ] && . ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh OS Xで動作しますか-それは「POSIX」の問題ですか? 私はそれを試しましたが、上記はまだUbuntuで動作するようです(したがって、実際には両方sourceで動作し.、つまり、シェルで必要な機能が得られます)。どちらを選ぶべきですか、それとも何か不足していますか? FWIW、OS Xでは、自分のを.bashrcから調達してい.bash_profileます。
11 osx  bashrc  posix 

2
posixシェル:環境変数名のリストを出力します(値なし)
複数の実装で機能するposix互換の方法で、現在定義されている環境変数のリストをそれらの値なしで出力するにはどうすればよいですか? 一部の実装(mksh、freebsd / bin / sh)では、export単独で使用するだけで十分です。 $ export FOO2 FOO ただし、他の一部の実装(bash、zsh、dash)ではexport、値も表示されます。たとえば、bashの場合: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ asdkj=fkajdsf:\$ \t:askjfkajsf=asdfkj:\$ safdkj$ 他のオプションのような、envまたはprintenv値のない変数名のみを出力するオプションはありません。少なくとも、私が試したlinuxおよびfreebsdプラットフォームではそうではありません。 awk / sed / etcへのパイピング。または、パラメーター展開手法(例:)を使用してリストをトリミングする${foo%%=*}こともできますが、行をまたがる可能性が=あり、値に空白が含まれる可能性がある値を処理する必要があります(上記の例を参照)。 特定のシェル実装に固有の回答は興味深いですが、私は主に実装間で互換性のあるものを探しています。

1
bashで行われたPOSIXでの間接変数展開?
それは可能ですか、またはBashで行うことができるようにPOSIXで間接変数展開を行うためのエレガントなハックがありますか? コンテキストについては、私は次のことをしようとしています: for key in ${!map_*} do # do something done 編集:明確にするために、で始まるシェル変数にアクセスしたいと思いますmap_。

1
POSIXは標準ユーティリティがPATHにあることを保証しますか?
では「コマンド検索と実行」セクション、POSIX仕様では、それは言うPATH(一部例外あり)を実行するためのユーティリティを見つけたときに検索されます。仕様は、PATHすべての標準ユーティリティが見つかることを保証する値に初期化される場所について言及していますか? または、標準ユーティリティを実行しようとしたときに「コマンドが見つかりません」というエラーが発生しないことを保証するために、次のようなことをする必要がありますか? PATH=$(command -p sh -c 'printf %s "${PATH}"') (ユーティリティのPOSIX仕様をcommand参照)
11 path  posix  standard 

3
posix / chmodの大文字Xとは何ですか?
私は何を知っているugoa(所有者、グループ、他の人、すべての)またはrwxの(右/読み取り/実行)、または4,2,1もしくは-、f、d、l私はに読み込もうとしましたが、man chmod首都のかを理解することXでchmodはなくありませんでしたそれのエントリー。次に、この記事をposix / chmodで読みましたが、次の箇所で行き詰まっていました。 ターゲットa)がディレクトリである場合にのみ実行可能ビットを設定しますb)ユーザー、グループ、その他のいずれかに対して、少なくとも1つの実行可能ビットが既に設定されています。 このコード例を示すこの記事も読んでいます。 chmod -R u=rwX,g=rX,o=rX testdir/ testdir/所有者(u)、グループ(g)、およびその他(o)に関して、に再帰的な許可があることを理解していますが、それでも大文字のXの意図を逃していることを認めます。 おそらく、ここでの教訓的な表現は、これにいくらかの光を当てるかもしれません(ここでこれを公開する主な理由は、これに関するSEセッションが見つからなかったためです)。 更新 申し訳ありませんが、私は男でそれを逃しました。引数のリストの前にXが表示されるとは思っていませんでしたが、検索ではXではなくXが返されると思いました。

4
文字列変数の行数をPOSIXで数える方法は?
私はこれをバッシュでできることを知っています: wc -l <<< "${string_variable}" 基本的に、私が見つけたものはすべて<<<Bashオペレーターに関係していました。 しかし、POSIXシェルで<<<はは定義されておらず、何時間も別のアプローチを見つけることができませんでした。これには簡単な解決策があると確信していますが、残念ながら今のところ見つかりませんでした。

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