• R/O
  • SSH
  • HTTPS

yash: Commit


Commit MetaInfo

Revision4143 (tree)
Time2020-11-05 20:58:04
Authormagicant

Log Message

Documentation (#39287, #40842)

Change Summary

Incremental Difference

--- yash/trunk/NEWS (revision 4142)
+++ yash/trunk/NEWS (revision 4143)
@@ -22,6 +22,8 @@
2222 expansion inside double-quotes have been changed to match with
2323 the behavior of other existing shells. For example, "${x-\a'b'}"
2424 now expands to \a'b' rather than ab.
25+ = When there is no command word in a simple command, redirections
26+ are now performed in a subshell after assignments are performed.
2527 * The "command" built-in with the -v or -V option was printing
2628 the pathnames of external commands with a redundant leading slash
2729 when the current working directory is "/" or "//".
--- yash/trunk/doc/exec.txt (revision 4142)
+++ yash/trunk/doc/exec.txt (revision 4143)
@@ -21,11 +21,19 @@
2121 If there is only one word of the expansion results, there are no command
2222 argument words.
2323 If there are none of the expansion results, there is no command name either.
24-. link:redir.html[Redirection] specified in the command, if any, is processed.
24+. If the command name exists and there are any link:redir.html[redirections]
25+ specified in the command, they are processed.
2526 The word token after each redirection operator is expanded.
26- If an error occurs during processing redirection (including when expanding
27- the word token), the execution of this simple command is aborted with a
28- non-zero exit status.
27+ If an error occurs during processing the redirections (including when
28+ expanding the word token), the execution of this simple command is aborted
29+ with a non-zero exit status.
30++
31+[NOTE]
32+In other shells, redirections may be processed in a different step:
33+POSIX does not specify the order in which redirections and assignments are
34+processed when there is no command name or the name denotes a
35+link:builtin.html#types[special built-in].
36+
2937 . Assignments specified in the command, if any, are processed.
3038 For each assignment token, the value is expanded and assigned to the
3139 specified link:params.html#variables[variable].
@@ -52,10 +60,14 @@
5260 variables may be persistent, that is, may remain even after the execution of
5361 the simple command.
5462
55-. If there is no command name, the command execution ends with the exit status
56- of zero (unless there are any link:expand.html#cmdsub[command substitutions]
57- in the command, in which case the exit status of the simple command is that
58- of the last executed command substitution).
63+. If there is no command name, the link:redir.html[redirections] are processed
64+ in a <<subshell,subshell>>, then the command execution ends.
65+ If an error occurs in the redirections,
66+ the exit status of the simple command is non-zero.
67+ If there were any link:expand.html#cmdsub[command substitutions] performed
68+ in the assignments, the exit status of the simple command is that of the
69+ last executed command substitution.
70+ Otherwise, the exit status is zero.
5971 . A command to be executed is determined using the <<search,command search
6072 algorithm>> and the command is executed.
6173 +
--- yash/trunk/doc/ja/exec.txt (revision 4142)
+++ yash/trunk/doc/ja/exec.txt (revision 4143)
@@ -14,7 +14,11 @@
1414 . 単純コマンドに含まれる、変数代入とリダイレクト以外のトークンを全て{zwsp}link:expand.html[展開]します。展開エラーが発生した場合は、この単純コマンドの実行は中止されます (このとき単純コマンドの終了ステータスは非 0 です)。
1515 +
1616 以下、展開の結果得られた最初の単語をdfn:[コマンド名]、それ以外の単語をdfn:[コマンド引数]と呼びます。得られた単語が一つの場合は、コマンド引数は存在しません。得られた単語が一つもない場合は、コマンド名もコマンド引数も存在しません。
17-. 単純コマンドに対する{zwsp}link:redir.html[リダイレクト]を実行します。リダイレクトに含まれるトークンの展開はここで行われます。リダイレクトエラーが発生した場合は、この単純コマンドの実行は中止されます (このとき単純コマンドの終了ステータスは非 0 です)。リダイレクトに含まれるトークンの展開時のエラーはリダイレクトエラーに含まれます。
17+. コマンド名が存在する場合、単純コマンドに対する{zwsp}link:redir.html[リダイレクト]を実行します。リダイレクトに含まれるトークンの展開はここで行われます。リダイレクトエラーが発生した場合は、この単純コマンドの実行は中止されます (このとき単純コマンドの終了ステータスは非 0 です)。リダイレクトに含まれるトークンの展開時のエラーはリダイレクトエラーに含まれます。
18++
19+[NOTE]
20+Yash 以外のシェルではリダイレクトの実行タイミングが異なることがあります。POSIX では、コマンド名が存在しない場合または{zwsp}link:builtin.html#types[特殊組込み]である場合にリダイレクトと代入のどちらを先に行うか規定されていません。
21+
1822 . 単純コマンドに含まれる変数代入を実行します (配列の代入を含む)。それぞれの変数代入について、値が展開され、指定された名前の{zwsp}link:params.html#variables[変数]に代入されます。代入エラーが発生した場合は、この単純コマンドの実行は中止されます (このとき単純コマンドの終了ステータスは非 0 です)。代入される値の展開時のエラーは代入エラーに含まれます。
1923 +
2024 --
@@ -27,7 +31,7 @@
2731 [NOTE]
2832 Yash 以外のシェルでは代入の動作が異なることがあります。特殊組込みまたは関数では変数はエクスポート対象にならないかもしれません。また関数の実行終了後も変数が残るかもしれません。
2933
30-. コマンド名が存在しない場合は、単純コマンドの実行はこれで終わりです。単純コマンドの終了ステータスは 0 になります (ただし単純コマンド実行中に{zwsp}link:expand.html#cmdsub[コマンド置換]が行われた時は、最後のコマンド置換のコマンドの終了ステータスが単純コマンドの終了ステータスになります)。
34+. コマンド名が存在しない場合は、<<subshell,サブシェル>>で{zwsp}link:redir.html[リダイレクト]を実行し、そこで単純コマンドの実行を終了します。リダイレクトエラーが発生した場合、単純コマンドの終了ステータスは非 0 になります。代入の途中で{zwsp}link:expand.html#cmdsub[コマンド置換]が行われた時は、最後のコマンド置換のコマンドの終了ステータスが単純コマンドの終了ステータスになります。それ以外の場合、終了ステータスは 0 になります。
3135 . 後述の<<search,コマンドの検索>>の仕方に従って実行すべきコマンドを特定し、そのコマンドを実行します。
3236 +
3337 --
Show on old repository browser