El script en cuestión finaliza el último proceso en mi puerto local 8080.
#!/bin/bash
x=$(lsof -i:8080 | tail -1 | awk '{print $2}')
kill -9 $x
No funcionó, si el script se llamaba 'killl' (¿entiendes? ¿Matar más reciente?). Me dio un mensaje para cmdsubst>
cambiar el nombre del script a 'asdf', todo funciona. ¿Hay alguna explicación para este comportamiento? Estoy usando MacOS El Capitán.
shell-script
osx
Zeick
fuente
fuente
killl
?killl
puede malinterpretarse como incorrectamente deletreadokill
. Es mejor ser explícito y más descriptivo:kill_latest
okill_last
.type killl
shell donde intentaste iniciarlo?Respuestas:
cmdsubst>
es la solicitud secundaria impresa por elzsh
shell cuando está esperando que se ingrese el final de una sustitución de comando.Si obtiene ese mensaje después de ingresar
killl<Return>
, la única explicación razonable es que tiene un alias (que es una forma de expansión de macro de cadena)killl
que se expande a algo que contiene una$(...)
sustitución de comando no terminada , como:¿Dónde le
zsh
está pidiendo que cierre esa$(...)
sustitución de comando?Algunas notas más:
lsof
se ordena por pid. los números pid están envueltos, un pid más grande no es garantía de que el proceso se inició más tarde.-i:8080
informará los sockets TCP o UDP que tienen el puerto 8080 como puerto de origen o destino, ya sea un socket de escucha, de aceptación o de conexión.-t
opción delsof
:lsof -ti:8080 | tail -n2
kill -9
es decirkill -s KILL
, que envía una señal de que la aplicación no puede actuar para salir con gracia. Solo debe usarse como último recurso.Para eliminar el proceso iniciado más recientemente que tiene un socket vinculado (cualquier extremo) en el puerto 8080, puede hacer:
(asume GNU
sort
(como se encuentra en macOS) y unaps
implementación que admite lalstart
columna (como macOS 'y procps-ng, aunque el código tendría que actualizarse para procps-ng donde se intercambian los campos de mes y día)).fuente
Porque cuando escribiste el comando no escribiste
escribiste o similar. Esto no tenía nada que ver con el nombre del guión, o incluso que era un guión en primer lugar. Podría haber logrado el mismo efecto con un comando totalmente inexistente: El analizador del shell esperaba más entrada para completar el único comando parcialmente completo. Su pensamiento sobre el nombre del guión es una pista falsa completa.fuente
killl $(
por alguna razón, y es muy poco probable que lo haya hecho. La respuesta de Stéphane Chazelas es más probable.`
es más probable que$(
.`
no es probable en absoluto ya que no da el mismo aviso . Intentalo. No, Herhtar; No es una suposición cuando escribir eso o similar es la forma de obtener ese aviso . Es una deducción.killl
escribió" cuando, como explica Stéphane Chazelas, es completamente posible que OP sí lo haya hechokilll
. Por lo tanto, he rechazado su respuesta como incorrecta.