убить и приостановить задание одной командой

Когда вы используете echo $cmdили $cmdбез кавычек, split+glob вызывается для содержимого $cmd. Это не имеет ничего общего с тем, что происходит, когда вы выполняете echo cat a b, где интерпретация синтаксиса оболочки разделяет cat, aи bна разные аргументы для перехода к echo.

Разделенная часть команды split+glob выполняется на основе содержимого $IFS, которое по умолчанию содержит SPC, поэтому слова, полученные в результате этого разделения, никогда не могут содержать SPC. Вам нужно будет использовать другой разделитель:

IFS=:  # split on :
set -o noglob # disable glob part

cmd='cat:a b'
printf '<%s>\n' $cmd # split+glob
$cmd # split+glob

В качестве альтернативы, вместо того, чтобы полагаться на split+glob, вы могли бы cmdсодержать код командной строки оболочки (на языке оболочки )и вызывать evalдля интерпретации этого кода:

cmd='cat "a b"'
eval "$cmd" # note the quotes to disable split+glob
0
02.05.2020, 17:18
1 ответ
kill -stop %2 && kill %1

Пример:

$ sleep 100 &
[1] 2284
$ sleep 200 &
[2] 2325
$ sleep 300 &
[3] 2366
$ jobs
[1]   Running                 sleep 100 &
[2]-  Running                 sleep 200 &
[3]+  Running                 sleep 300 &
$ kill -stop %2 && kill %1
[1]   Terminated              sleep 100

[2]+  Stopped                 sleep 200
$ jobs
[2]+  Stopped                 sleep 200
[3]-  Running                 sleep 300 &
1
28.04.2021, 23:16

Теги

Похожие вопросы