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

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

2
割り当ては、コマンド置換がある場合を除いて、終了ステータスを持つコマンドに似ていますか?
次の例とそれらのPOSIXシェルでの出力を参照してください。 false;echo $?またはfalse || echo 1:1 false;foo="bar";echo $?またはfoo="bar" && echo 0:0 foo=$(false);echo $?またはfoo=$(false) || echo 1:1 foo=$(true);echo $?またはfoo=$(true) && echo 0:0 /programming/6834487/what-is-the-variable-in-shell-scriptingの最高投票の回答で述べたように: $? 最後に実行されたコマンドの戻り値を見つけるために使用されます。 これはおそらくこの場合少し誤解を招く可能性があるので、そのスレッドからの投稿でも引用されているPOSIX定義を取得しましょう。 ?最新のパイプラインの10進数の終了ステータスに展開します(パイプラインを参照)。 したがって、割り当て自体はゼロの終了値を持つコマンド(またはパイプラインパーツ)としてカウントされているように見えますが、割り当ての右側の前に適用されます(たとえば、ここでの例ではコマンド置換呼び出し)。 この振る舞いが実用的な見地からどのように意味を成すかはわかりますが、割り当て自体がその順序でカウントされることは、私には幾分珍しいようです。多分それが私にとって奇妙な理由をより明確にするために、割り当てが関数であったと仮定しましょう: ASSIGNMENT( VARIABLE, VALUE ) そしてfoo="bar"だろう ASSIGNMENT( "foo", "bar" ) のfoo=$(false)ようなものになります ASSIGNMENT( "foo", EXECUTE( "false" ) ) そのことを意味するEXECUTE実行が最初と後にのみ ASSIGNMENT実行されますが、それはまだだEXECUTEここで問題のステータス。 私の評価は正しいですか、それとも何かを誤解/不足していますか?これらは、私がこの振る舞いを「奇妙な」ものと見なす正しい理由ですか?

2
すべての出力をPOSIXシェルの「ロガー」に送信する方法は?
私はで別々に標準出力と標準エラーを記録したいと思います.xprofile使用しますlogger。バッシュでは、次のようになると思います。 exec 1> >(logger --priority user.notice --tag $(basename $0)) \ 2> >(logger --priority user.error --tag $(basename $0)) POSIX /bin/sh互換の方法でそれをどのように行うのですか?
10 shell  pipe  posix 


2
なぜPOSIX Shell Grammarの開始中括弧の後に中括弧コマンドグループにスペースが必要なのですか?
TL; DR:POSIXブレースグループで{予約語の後にスペースが必要なのに、サブシェルでは予約語の後にスペースがないのはなぜ(ですか? POSIXシェル文法は、ブレースグループとサブシェルを次のように定義します brace_group : Lbrace compound_list Rbrace subshell : '(' compound_list ')' 今、それを文字通り読んでいる場合、スペースは重要です。これは、次のように開き中括弧と括弧を区切るスペースが必要であることを意味します { echo hello world; } ( echo hello world ) これは、複合コマンドの定義とも一致します。 これらの複合コマンドのそれぞれには、最初に予約語または制御演算子があり、最後に対応するターミネーター予約語または演算子があります。 ただし、意味がないのはなぜか(list)、問題なく機能する( list )(その後ろのスペース(は不要)が、ブレースの展開には先行スペースが必要である、つまり機能{echo hello;}しないためである。 もちろん、予約語がシェルワードとして扱われると、フィールド分割の概念に合わせるために後でスペースが必要になりますが、定義自体はスペースについて言及していません。さらに、複合コマンドのPOSIX定義で両方が予約語と見なされている場合{、(これらの予約語の後のスペース文字に関して、それらの扱いが異なるのはなぜですか?現在、ksh(1)のマニュアルには次のように記載されています。 文字のシーケンスである単語は、引用符で囲まれていない空白文字(スペース、タブ、および改行)またはメタ文字(<、>、|、;、&、(および))で区切られます。 言い換えると、kshが(最初の単語がコマンドまたは変数の割り当てである単語の区切り文字として認識することは理にかなっています。ただし、POSIXは(メタ文字として言及されていないようです。POSIX文法に関して私が見つけた唯一の可能な説明{は、「トークン」と見なさ(れるというものです。 /* These are reserved words, not operator tokens, and are recognized when reserved words are recognized. */ …
10 shell  posix  subshell  syntax 

2
条件式の「set -e」での「eval」の動作
コマンドを検討する eval false || echo ok echo also ok 通常、我々はこれを実行するために期待するfalseユーティリティをして、終了ステータスがゼロであることから、その後、実行するecho okとecho also ok。 すべてのPOSIXのような私が使用してシェルでは(ksh93、zsh、bash、dash、OpenBSDのksh、とはyash)、これは何が起こるかですが、私たちは有効にした場合、物事は面白くset -e。 set -eが有効な場合、OpenBSD shとkshシェル(どちらもから派生pdksh)は、の実行時にスクリプトを終了しますeval。他のシェルはそれを行いません。 POSIXは、特殊な組み込みユーティリティ(などeval)のエラーにより、非対話型シェルが終了するはずであると述べています。実行がfalse「エラー」を構成するかどうかは完全にはわかりません(もしそうなら、それはset -eアクティブであることとは無関係です)。 これを回避する方法evalは、をサブシェルに置くことです。 ( eval false ) || echo ok echo also ok 問題は、POSIXに準拠した正しいシェルスクリプトでそれを実行する必要があるかどうか、またはOpenBSDのシェルのバグかどうかです。また、上記にリンクされているPOSIXテキストの「エラー」とはどういう意味ですか? 余分な情報:OpenBSDシェルは 、コマンドのecho ok有無にかかわらず両方を実行しますset -e eval ! true || echo ok 私の元のコードは次のようになりました set -e if eval "$string"; then echo …
9 posix  openbsd  eval 

1
`\ time`、` t \ ime`、 `\ cd`は実際には何をしますか?(シェルのバックスラッシュで楽しい)
/usr/bin/timeと組み込みシェル(bashとzsh)の違いについて議論している間time、誰かが\timeを取得するための省略形として使用できると述べました/usr/bin/time。 最初は無害なショートカットのように見えましたが、次にいくつかの質問が浮上しました。 なぜうまくいくのt\imeか? ¹ は\cd変更/usr/bin/cdしないのに、なぜディレクトリを変更するのですか? したがって、明らかに、\fooと同等ではありません$(which foo)。質問は今です: \foobashとzshの両方で観察された動作は、シェルのPOSIX定義によって何らかの方法でカバーされていますか?そうである場合、それが動作するのはなぜですか? 脚注1:/usr/bin/cd私のシステムでは、 #!/bin/sh builtin cd "$@"

2
`posix_spawn`の出力を取得します
したがって、POSIXを使用してUnix / Linuxでプロセスを実行できますが、プロセスのSTDOUTとSTDERRの両方をファイルに保存/リダイレクトできる方法はありますか?spawn.hヘッダは減速含まposix_spawn_file_actions_adddup2関連見えたが、私は確かに非常にそれを使用する方法はありませんよ。 プロセスが生成します: posix_spawn(&processID, (char *)"myprocess", NULL, NULL, args, environ); 出力ストレージ: ...?
9 c  posix  fork 

2
POSIXテストと-a
私はcheckbashismsで私のスクリプトをチェックし、次の警告を受け取りました: possible bashism in check_ssl_cert line 821 (test -a/-o): if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then ではPOSIX仕様のセクション4.62.4 Iの発見 primary -a primaryバイナリを実行し、プライマリとプライマリの結果を実行します。-a演算子は-o演算子よりも優先されます。 なぜポータブルではない-aと-o考えられますか?

1
POSIX.1eが廃止されたのはなぜですか?
提案されたPOSIX.1e標準は、広くサポートされているACLなどのいくつかを定義しています。しかし、提案自体は取り下げられました。どうして?私がオンラインで見つけた唯一の理由は、http://wt.tuxomania.net/topics/1999_06_Posix_1e/からのこの引用です: なぜPosix.1eが放棄されたかは、今日(2014年7月)の観点から理解するのは困難です。Solaris、Irix、Linux、そしておそらく他のUnicesが標準を認識しているようです。一方、FreeBSDプロジェクトは反対の引数を見つけ、デフォルトでは機能(「きめの細かい特権」)を統合しませんでした。 一方、JörgSchillingはこのサイトでこれを述べています(ファイルシステムACLの「マスク」の正確な目的は何ですか?) ところで、ACLのPOSIX-1003.1ドラフトは、1997年にリファレンス実装(ag Solaris)によって撤回されました。これは、顧客が、後でNVSv4 ACLとして標準化されたより強力な方法を望んでいることが判明したためです。 起こったことの詳細な説明はありますか?
9 posix  history  acl 

2
POSIXシェルで文字を繰り返す方法に関する説明が必要
スタックオーバーフローに関する次の回答、 bashで文字を繰り返すにはどうすればよいですか? 次のように、POSIXの 1つのもっともらしい方法を課します-1つの文字を繰り返します。この例では、等号を100回使用します。 printf %100s | tr " " "=" 私の問題は、それがどのように機能するのか理解していないことです。マニュアルを読むなどのコメントはご遠慮ください、私はそうしました。私はそれを賢くはないので、私はこれまで使用したことがなくtr、そのようなprintfステートメントを見たことがないので、この質問をします。
8 shell  posix  printf  tr 

2
変数に改行が含まれているかどうかをテストします(POSIX)
一部のシェルはこの種のテストを受け入れることを知っています: t() { [[ $var == *$'\n'* ]] && res=yes || res=no printf '%s ' "$res"; } var='ab cd' t var='abcd' t echo 実行時: $ bash ./script yes no POSIX(ダッシュ)と同等の機能とは 以下は信頼できるテスト方法ですか? nl=' ' t() { case "$var" in *$nl* ) res=yes ;; * ) res=no ;; esac printf '%s ' …

2
特定のファイルのファイルシステム情報を取得するにはどうすればよいですか?
ファイルに関するファイルシステム情報を見つける最善の方法は何ですか。 たとえば、ファイルがある場合 /media/xyz/path/to/file.ext そして/etc/fstabが含まれています //server1/Share1 /media/xyz cifs option1=value1,... ファイルがSamba共有にあること、ローカルパスが/path/to/file.extあり、ファイルシステムがマウントされているオプションを確認するにはどうすればよいですか? mountポータブルソリューションの出力を解析していますか?または解析しfindmntますか?それを達成するためのPOSIX準拠の方法はありますか?
8 mount  posix 

2
変数の割り当ては現在実行中のシェルに影響します
いくつかのコードを書いているとき、私はこの行を見つけました: $ TZ="America/Los_Angeles" date; echo "$TZ" Thu Dec 24 14:39:15 PST 2015 「ロサンゼルス」での実際の時間を正しく示し、変数の値がTZ保持されないこと。期待どおりすべて。 ただし、この行では、一部の形式を日付に展開し、基本的に同じことを実行するため、TZの値が保持されます。 TZ="America/Los_Angeles" eval date; echo "$TZ" Thu Dec 24 14:41:34 PST 2015 America/Los_Angeles さらにいくつかのテストを行った結果、これが一部のシェルでのみ発生することがわかりました。ダッシュ、kshでは発生しますが、bashやzshでは発生しません。 Q 質問は次のとおりです。 TZの値が現在のシェルで保持されているのはなぜですか? それをどのように回避/制御できますか(可能な場合)? 追加。 次の2行を使用して、いくつかのシェルでテストを実行しました。 myTZ="America/Los_Angeles" unset TZ; { TZ="$myTZ" date; } >/dev/null; echo -n " direct $TZ" unset TZ; { TZ="$myTZ" …

1
最小限のPOSIX準拠オペレーティングシステム
教育目的のために、シェル、基本ユーティリティ、ANSI CコンパイラなどのPOSIX準拠のベースから始めて、パッケージを組み合わせることでどのような環境を構築できるかを確認します。 ただし、私が遭遇したほとんどの最小限のPOSIX準拠のオペレーティングシステムは、組み込みまたはプロプラエタリーであるようです。Virtualboxで簡単に実行できるオープンソースシステムはありますか? 私はそのような環境をゼロから構築することについて少し調べましたが、単にブート可能/使用可能な環境を取得するだけでなく、POSIX準拠の環境を取得するのは大変な作業のようです。私はいつかPOSIX OSを構築することに挑戦するかもしれませんが、最初にもう少しコンピュータに詳しい人になりたいです。 注意: Linuxが完全にPOSIXに準拠していないという話を聞いたことがあると思いますが、より一般的で不可欠なオープンソースツール(wgetやw3mなど)をコンパイルしてビルドできる限り、それが可能かどうかに関係なく、かなり満足しています。 Linuxカーネルを使用しました。同じことが、オペレーティングシステムに付属していると思われる他の基本コンポーネント(たとえばglibc)にも当てはまります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.