Как расширить переменные в списке заданий bash - PullRequest
1 голос
/ 22 марта 2012

Можно ли развернуть имена переменных в списке заданий bash (команда jobs).Например, я получаю список заданий, например

[1]   Angehalten              vi $file
[2]   Angehalten              vi $file

, который ссылается на сеансы vi с двумя различными значениями $ file.Теперь я хочу вывести окно vi с определенным файлом на передний план, но не знаю, какой у него номер задания.

Ответы [ 5 ]

4 голосов
/ 22 марта 2012

Следующая команда должна работать (протестировано с bash 4.2.10 в Ubuntu 11.10)

paste <(jobs) <(jobs -p | xargs ps -p | tail -n+2 | awk '{print substr($0, index($0, $5))}')

выход:

[1]   Stopped                 vi $A     vi a
[2]-  Stopped                 vi $A     vi b
[3]+  Stopped                 vi $A     vi c

Идея такая же, как у Карла - извлечь команду по идентификатору процесса

4 голосов
/ 22 марта 2012

Вы можете использовать jobs -l, чтобы получить PID каждого, а затем найти их в выводе ps, который покажет расширенную строку:

$ jobs -l
[2]-  6445 Suspended: 18           vi $file
[3]+  6473 Suspended: 18           vi $file
$ ps | grep vi
 6445 ttys000    0:00.03 vi x
 6473 ttys000    0:00.03 vi y
 6485 ttys000    0:00.00 grep --color vi
0 голосов
/ 15 апреля 2016
jobs -p | while read pid; do ps auxwq $pid; done | grep -v USER
0 голосов
/ 23 января 2015

Аналогично ответу Алекса, но без всех трюков вставки и подпроцесса. У меня это работало на FreeBSD 10.0 с bash v4.3.30

рабочих мест -p | xargs ps -p | хвост -n + 2 | awk '{print substr ($ 0, индекс ($ 0, $ 5))}'

0 голосов
/ 23 июля 2013

Если вы можете попытаться раскрыть переменные перед выполнением команды. Может быть, есть способ сделать это без записи в файл. Если нет, используйте mktemp для запуска временного файла.

cmd1=sleep
echo "$cmd1 10 &" > /tmp/veryscary.sh && source /tmp/veryscary.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...