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