Skip to content

Commit

Permalink
bg: Update $! when resuming a background job
Browse files Browse the repository at this point in the history
This is a POSIX.1-2024 requirement.
  • Loading branch information
magicant committed Nov 16, 2024
1 parent d05054f commit 58a6b81
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 3 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
directory names for the first operand even before the user enters a
slash.
- Improved POSIX.1-2024 support:
- After the `bg` built-in resumed a job, the `!` special parameter
expands to the process ID of the job.
- An interactive shell no longer exits on an error in the `exec`
built-in, even if the POSIXly-correct mode is on.
- Updated the sample initialization script (yashrc):
Expand Down
2 changes: 2 additions & 0 deletions NEWS.ja
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
- [行編集] . 組込みコマンドの最初の引数の補完で、スラッシュを入力する
前からディレクトリ名を補完候補として出すようにした
- POSIX.1-2024 のサポートを強化:
- `bg` 組込みでジョブを再開した後は `!` 特殊パラメータはジョブの
プロセス ID に展開されるようになった
- POSIX 準拠モードであっても、対話シェルが `exec` 組込みで失敗した
ときはシェルを終了しないようにした
- 初期化スクリプト (yashrc) のサンプルを更新:
Expand Down
2 changes: 1 addition & 1 deletion doc/ja/params.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Yash では以下の特殊パラメータが利用可能です。
このパラメータの値は、最後に終了した{zwsp}link:syntax.html#pipelines[パイプライン]の終了ステータスを表す 0 以上の整数です。

[[sp-exclamation]]+!+::
このパラメータの値は、最後に実行した{zwsp}link:syntax.html#async[非同期コマンド]のプロセス ID です。
このパラメータの値は、最後に開始した{zwsp}link:syntax.html#async[非同期コマンド]もしくは最後に{zwsp}link:_bg.html[再開]したジョブのプロセス ID です。

[[sp-asterisk]]+*+::
このパラメータの値は、現在の<<positional,位置パラメータ>>の値です。位置パラメータが一つもない場合、このパラメータの値は空文字列です。位置パラメータが複数ある場合、このパラメータの値は全ての位置パラメータの値を連結したものです。各位置パラメータの値の間は以下に従って区切られます。
Expand Down
3 changes: 2 additions & 1 deletion doc/params.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ The exit status of the last executed link:syntax.html#pipelines[pipeline].
The value is a non-negative integer.

[[sp-exclamation]]+!+::
The process ID of the last executed link:syntax.html#async[asynchronous list].
The process ID of the last started link:syntax.html#async[asynchronous list]
or the last link:_bg.html[resumed] background job.

[[sp-asterisk]]+*+::
This special parameter represents the whole <<positional,positional
Expand Down
3 changes: 2 additions & 1 deletion job.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* Yash: yet another shell */
/* job.c: job control */
/* (C) 2007-2020 magicant */
/* (C) 2007-2024 magicant */

/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -1236,6 +1236,7 @@ int continue_job(size_t jobnumber, job_T *job, bool fg)
assert(false);
}
} else {
lastasyncpid = job->j_procs[job->j_pcount - 1].pr_pid;
set_current_jobnumber(shopt_curbg ? jobnumber : current_jobnumber);
status = (job->j_status == JS_RUNNING) ? Exit_SUCCESS : Exit_FAILURE;
}
Expand Down
6 changes: 6 additions & 0 deletions tests/bg-p.tst
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ bg >bg.out
grep -q '^\[[[:digit:]][[:digit:]]*][[:blank:]]*sleep 1' bg.out
__IN__

test_O -e 17 'bg updates $!' -m
sh -c 'kill -s STOP $$; exit 17'
bg >/dev/null
wait $!
__IN__

test_O -e 0 'exit status of bg' -m
sh -c 'kill -s STOP $$; exit 17'
bg >/dev/null
Expand Down

0 comments on commit 58a6b81

Please sign in to comment.