Utilizo Bash como mi shell interactivo y me preguntaba si había una manera fácil de hacer que Bash ejecutara un comando del sistema en lugar de un comando incorporado del shell en el caso en que ambos compartan el mismo nombre.
Por ejemplo, use el sistema kill
(desde util-linux
) para imprimir la identificación del proceso (pid) de los procesos nombrados en lugar de enviar una señal:
$ /bin/kill -p httpd
2617
...
Sin especificar la ruta completa del comando del sistema, se utiliza el Bash incorporado en lugar del comando del sistema. El kill
incorporado no tiene la -p
opción, por lo que el comando falla:
$ kill -p httpd
bash: kill: p: invalid signal specification
Intenté las respuestas enumeradas en Hacer que bash use el comando externo `time` en lugar del shell incorporado, pero la mayoría de ellas solo funcionan porque en time
realidad es una palabra clave de shell , no un shell incorporado. .
Además de deshabilitar temporalmente el Bash incorporado enable -n kill
, la mejor solución que he visto hasta ahora es usar:
$(which kill) -p httpd
¿Hay otras formas más fáciles (implican menos escribir) de ejecutar un comando externo en lugar de un shell incorporado?
Tenga en cuenta que kill
es solo un ejemplo y me gustaría una solución generalizada similar a la forma en que el prefijo con el command
incorporado evita que se ejecuten funciones que tienen el mismo nombre que un comando externo. En la mayoría de los casos, generalmente prefiero usar la versión incorporada, ya que ahorra bifurcar un nuevo proceso y algunas veces la función incorporada tiene características que el comando externo no tiene.
$(…)
: vea esto , esto y esto .
which kill
en backticks (no puedo ponerlos en los comentarios) es un poco más corto.