Как убить виджеты оболочки gnome?

Текст, который вы цитируете, уже объясняет, почему time является ключевым словом:

Использование time как зарезервированного слова позволяет определять время для встроенных модулей оболочки, функций оболочки и конвейеров. Внешняя команда time не может легко определить время.

Если бы time был только встроенным модулем, он не смог бы правильно измерить время, затраченное конвейером, например:

$ time sleep 2 | sleep 4

real    0m4.002s
user    0m0.000s
sys     0m0.002s

Здесь time возвращает 4 секунды, что является временем, затраченным всем конвейером. Если бы она была реализована как встроенная, грамматика shell позволила бы ей вернуть только 2 секунды, потому что команда, встроенная или нет, видит только свои параметры, в данном конкретном случае sleep 2.

Другие ключевые слова, которые не могут быть реализованы встроенными модулями, используются для структурированных конструкций, таких как for, while, until, case, do, done, select, if, then, else, function. Как и time, они должны уметь обрабатывать интерпретируемые строки, не ограничиваясь простой границей команд.

Именно по этой же причине, т.е. возможности доступа ко всему вводу оболочки, подлежащему разбору, а не только к команде и ее параметрам, эти ключевые слова реализованы как есть. Например, параметры команд [ подвержены расширению и обработке оболочкой, поэтому вы не можете надежно использовать * в тесте, а > будет воспринято как перенаправление с неожиданными результатами.

С другой стороны, [[ изменяет поведение оболочки, так что вы можете использовать любой синтаксис, который она принимает, не беспокоясь об этом.

Вот несколько примеров, демонстрирующих разницу в поведении:

$ if [ * = "*" ]; then echo ok; fi
bash: [: too many arguments
$ if [[ * = "*" ]]; then echo ok; fi
ok

$ if [ 1 > 2 ]; then echo unexpected ; else echo expected; fi
unexpected
$ if [ 1 -gt 2 ]; then echo unexpected ; else echo expected; fi
expected
$ if [[ 1 > 2 ]]; then echo unexpected ; else echo expected; fi
expected

Обратите внимание, что if [ 1 > 2 ] не только возвращает неожиданный результат, но и создает (или перезаписывает!) в текущем каталоге файл с именем 2.

1
06.08.2018, 06:37
2 ответа

Вы всегда можете попробовать использовать ps, чтобы определить, какие процессы заканчиваются, например:

ps -ely | grep -i $PROCESSNAME

Предполагая, какими будут имена виджетов:

ps -ely | grep -i gnome

С большой вероятностью можно перечислить их все.

2
29.04.2021, 00:49

Я только что scp редактировал старый добрый xkill на этой машине, и он работал Как колдовство.

1
29.04.2021, 00:49

Теги

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