Я использую Bash в качестве интерактивной оболочки, и мне было интересно, есть ли простой способ заставить Bash выполнить системную команду вместо встроенной команды оболочки, если они оба имеют одно и то же имя.
Например, используйте system kill
(from util-linux
) для печати идентификатора процесса (pid) указанного процесса (ов) вместо отправки сигнала:
$ /bin/kill -p httpd
2617
...
Без указания полного пути к системной команде вместо системной команды используется встроенная команда Bash. kill
Встроенный не имеет -p
опции , чтобы команда не:
$ kill -p httpd
bash: kill: p: invalid signal specification
Я попробовал ответы, перечисленные в Make bash, используя внешнюю команду `time` вместо встроенной оболочки, но большинство из них работают только потому, что time
на самом деле это ключевое слово shell, а не встроенная оболочка .
Помимо временного отключения встроенной функции Bash enable -n kill
, лучшим решением, которое я видел до сих пор, является использование:
$(which kill) -p httpd
Существуют ли другие более простые (требующие меньшего количества ввода) способы выполнения внешней команды вместо встроенной оболочки?
Обратите внимание, что kill
это всего лишь пример, и я хотел бы получить обобщенное решение, подобное тому, как префикс с помощью command
встроенной функции предотвращает запуск функций, имеющих то же имя, что и у внешней команды. В большинстве случаев я обычно предпочитаю использовать встроенную версию, так как она сохраняет ветвление нового процесса, и иногда встроенная функция имеет функции, которых нет у внешней команды.
$(…)
- увидеть это , это и это .
which kill
в кавычки (не могу поместить их в комментарии) немного короче.