Вычесть две даты с помощью сценария оболочки [дубликат]

Используйте вместо него pkill :

alias killguake='pkill guake'

Это намного безопаснее, чем пытаться проанализировать таблицу процессов, выведенную ps .

Сказав это, я теперь объясню, почему ваш псевдоним не делает то, что вы хотите, но на самом деле используйте pkill .

Ваш псевдоним

alias killguake="kill -9 $(ps aux | grep guake | head -n -1 | awk '{print $2}')"

заключен в двойные кавычки. Это означает, что когда оболочка анализирует эту строку в сценарии инициализации оболочки, она выполняет подстановки команд ( $ (...) ). Таким образом, каждый раз, когда файл запускается, вместо того, чтобы давать вам псевдоним для уничтожения guake позже, он будет давать вам псевдоним, чтобы убить процесс guake , запущенный прямо сейчас .

Если вы перечислите свои псевдонимы (с псевдонимом ), вы увидите, что этот псевдоним выглядит примерно как

killguake='kill -9 91273'

или, возможно, даже просто

killquake='kill -9'

, если guake не был выполняется во время запуска оболочки.

Чтобы исправить это (но на самом деле просто используйте pkill ), вам нужно использовать одинарные кавычки и экранировать $ в скрипте Awk (который теперь находится в двойных кавычках. ):

alias killguake='kill -9 $(ps aux | grep guake | head -n -1 | awk "{print \$2}")'

Одна проблема с этим подходом в целом заключается в том, что вы будете сопоставлять процессы, принадлежащие другим пользователям. Во-вторых, вы, возможно, просто найдете команду grep guake вместо предполагаемого процесса. Другой заключается в том, что он выдаст ошибку, если процесс не был найден. Другой заключается в том, что вы вызываете пять внешних утилит для выполнения работы одной.

1
12.10.2015, 17:06
0 ответов

Теги

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