Ich schrieb einen Alias in meinem Bash-Profil, um mir zu helfen, Rogue-Rails-Server-Prozesse zu beenden, die nicht sauber schließen. Dieser Alias funktioniert gut.Übergeben einer Portnummer an lsof in einer Shell-Funktion
alias kill3000="lsof -i tcp: 3000 -t | xargs kill -9 | echo 'killed processes on port 3000'"
Ich wollte es allgemeiner machen, für Frameworks, die an anderen Ports arbeiten. Ich habe versucht, eine ähnliche Funktion zu machen, also könnte ich die Portnummer als Variable übergeben, aber ich bekomme einen Fehler. Die Funktion, die ich schrieb wie folgt aussieht ...
function killproc(){
"lsof -i tcp:$1 -t | xargs kill -9 | echo 'killed processes on port $1'"
}
Allerdings, wenn ich „killproc 3000“ laufen, ich folgende Fehlermeldung erhalten:
lsof: unacceptable port specification in: -i tcp:
ich kämpfen werde, das Problem zu verstehen, ich schätze jede Hilfe.
zitieren die ganze Zeile "" lsof -i ... getötet .. $ '"' sieht verdächtig aus. Um die Situation zu debuggen, lerne 'set -vx; ... cmd ....; Setzen Sie + vx', um zu sehen, wie die Shell Ihren Code interpretiert. Die mit '+' beginnenden Zeilen zeigen alle Variablenwerte an ihrem Platz. Alle '' dbl-quotierten Strings sind "normalisiert" auf ''' single-quoted strings. Viel Glück. – shellter
Danke, 'set-vx' war sehr hilfreich bei der Suche nach dem Problem. Die Variable wurde wiederholt, so dass es gesucht wurde für Port 3000 3000, die den Fehler verursacht. Ich bin mir nicht sicher, warum genau das geschah, aber das Ausführen von 'exec bash' löste das Problem für mich. Vielen Dank für die Hilfe! –