Рассматриваемый скрипт завершает последний процесс на моем локальном порте 8080.
#!/bin/bash
x=$(lsof -i:8080 | tail -1 | awk '{print $2}')
kill -9 $x
Это не сработало, если сценарий был назван «killl» (получите? Kill Latest?). Это дало мне подсказку для cmdsubst>
переименования скрипта в «asdf», все работает. Есть ли объяснение этому поведению? Я использую MacOS El Capitán.
shell-script
osx
Zeick
источник
источник
killl
?killl
может быть неверно истолковано как неправильно написаноkill
. Лучше быть явным и более наглядным:kill_latest
илиkill_last
.type killl
в оболочке, где вы пытались его запустить?Ответы:
cmdsubst>
вторичная подсказка, напечатаннаяzsh
оболочкой, когда она ожидает окончания подстановки команды.Если вы получаете это приглашение после простого ввода
killl<Return>
, то единственное разумное объяснение состоит в том, что у вас есть псевдоним (который является некоторой формой раскрытия строкового макроса),killl
который расширяется до чего-то, что содержит неопределенную$(...)
подстановку команд, например:Где
zsh
просит вас закрыть эту$(...)
подстановку команд.Еще несколько заметок:
lsof
сортируется по pid. Номера pid обернуты, больший pid не гарантирует, что процесс был запущен позже.-i:8080
будет сообщать о сокетах TCP или UDP с портом 8080 в качестве порта источника или назначения, будь то прослушивающий, принимающий или соединительный сокет.-t
опциюlsof
:lsof -ti:8080 | tail -n2
kill -9
iskill -s KILL
, который посылает сигнал о том, что приложение не может действовать для корректного выхода. Это следует использовать только в качестве крайней меры.Чтобы убить самый последний запущенный процесс, имеющий привязанный к сокету (любой конец) порт 8080, вы можете сделать:
(предполагается, что GNU
sort
(как найдено в macOS) иps
реализация, которая поддерживаетlstart
столбец (как macOS 'и procps-ng, хотя код должен был бы быть обновлен для procps-ng, где поменялись поля месяца и дня)).источник
Потому что, когда вы набрали команду, вы не набрали
ты напечатал или похожие. Это не имело никакого отношения к названию сценария или даже к тому, что это был сценарий в первую очередь. Вы могли бы достичь того же эффекта с помощью совершенно несуществующей команды: Парсер оболочки ожидал большего ввода для выполнения единственной частично завершенной команды. Вы думаете о названии сценария - полная красная сельдь.источник
killl $(
по какой-то причине, и очень маловероятно, что он сделал это. Ответ Стефана Шазеласа более вероятен.`
более вероятно, чем$(
.`
маловероятно, так как он не выдает такой же запрос . Попытайся. Нет, Херхтар; это не предположение , когда типирование , что или подобное есть способ , чтобы получить это приглашение . Это дедукция.killl
», когда, как объясняет Стефан Шазелас, вполне возможно, что OP действительно печаталkilll
. Поэтому я отклонил ваш ответ как неправильный.