Le script en question termine le dernier processus sur mon port localhost 8080.
#!/bin/bash
x=$(lsof -i:8080 | tail -1 | awk '{print $2}')
kill -9 $x
Cela n'a pas fonctionné, si le script s'appelait 'killl' (l'obtenir? Kill Latest?). Cela m'a donné une invite pour cmdsubst>
renommer le script en 'asdf', tout fonctionne. Y a-t-il une explication à ce comportement? J'utilise MacOS El Capitán.
shell-script
osx
Zeick
la source
la source
killl
?killl
peut être mal interprété comme mal orthographiékill
. Il vaut mieux être explicite et plus descriptif:kill_latest
oukill_last
.type killl
dans le shell où vous avez essayé de le démarrer?Réponses:
cmdsubst>
est l'invite secondaire imprimée par lezsh
shell lorsqu'il attend la fin d'une substitution de commande en cours de saisie.Si vous obtenez cette invite après avoir simplement entré
killl<Return>
, la seule explication raisonnable est que vous avez un alias (qui est une forme d'extension de macro de chaîne) pourkilll
qu'il se développe en quelque chose qui contient une$(...)
substitution de commande non terminée , comme:Où
zsh
vous demande de fermer cette$(...)
substitution de commande.Quelques notes supplémentaires:
lsof
est triée par pid. les numéros pid sont encapsulés, un pid plus grand ne garantit pas que le processus a été démarré plus tard.-i:8080
signalera les sockets TCP ou UDP dont le port 8080 est le port source ou de destination, qu'il s'agisse d'un socket d'écoute, d'acceptation ou de connexion.-t
option delsof
:lsof -ti:8080 | tail -n2
kill -9
estkill -s KILL
, ce qui envoie un signal que l'application ne peut pas agir pour se terminer normalement. Il ne doit être utilisé qu'en dernier recours.Pour tuer le processus démarré le plus récemment qui a un socket lié (l'une ou l'autre extrémité) sur le port 8080, vous pouvez faire:
(suppose GNU
sort
(comme on le trouve sur macOS) et uneps
implémentation qui prend en charge lalstart
colonne (comme macOS et procps-ng, bien que le code devrait être mis à jour pour procps-ng où les champs mois et jour sont échangés)).la source
Parce que lorsque vous avez tapé la commande, vous n'avez pas tapé
tu as tapé ou similaire. Cela n'avait rien à voir avec le nom du script, ni même que c'était un script en premier lieu. Vous auriez pu obtenir le même effet avec une commande totalement inexistante: L'analyseur du shell attendait plus de données pour terminer la seule commande partiellement terminée. Votre réflexion sur le nom du script est un hareng rouge complet.la source
killl $(
pour une raison quelconque, et très peu probable qu'il l'ait fait. La réponse de Stéphane Chazelas est probablement le cas.`
c'est plus probable que$(
.`
est peu probable car il ne donne pas la même invite . Essayez-le. Non, Herhtar; ce n'est pas une hypothèse lors de la frappe ou similaire est le moyen d'obtenir cette invite . C'est une déduction.killl
", alors que comme l'explique Stéphane Chazelas, il est tout à fait possible que OP ait bien tapékilll
. Par conséquent, j'ai rejeté votre réponse comme étant incorrecte.