O script em questão finaliza o processo mais recente na minha porta 8080 do host local.
#!/bin/bash
x=$(lsof -i:8080 | tail -1 | awk '{print $2}')
kill -9 $x
Não funcionou, se o script tivesse o nome 'killl' (entendeu? Kill Latest?). Ele me deu uma solicitação para cmdsubst>
renomear o script para 'asdf', tudo funciona. Existe uma explicação para esse comportamento? Estou usando o MacOS El Capitán.
shell-script
osx
Zeick
fonte
fonte
killl
?killl
pode ser mal interpretado como escrito incorretamentekill
. É melhor ser explícito e mais descritivo:kill_latest
oukill_last
.type killl
shell em que você tentou iniciá-lo?Respostas:
cmdsubst>
é o prompt secundário impresso pelozsh
shell enquanto aguarda o final de uma substituição de comando ser inserida.Se você receber esse prompt depois de entrar
killl<Return>
, a única explicação razoável é que você tem um alias (que é uma forma de expansão de macro de cadeia)killl
que se expande para algo que contém uma$(...)
substituição de comando não terminada , como:Onde
zsh
está pedindo para você fechar essa$(...)
substituição de comando.Mais algumas notas:
lsof
é classificada por pid. números de pid são agrupados, um pid maior não garante que o processo foi iniciado mais tarde.-i:8080
relatará os soquetes TCP ou UDP que têm a porta 8080 como a porta de origem ou de destino, seja um soquete de escuta, aceitação ou conexão.-t
opção delsof
:lsof -ti:8080 | tail -n2
kill -9
ékill -s KILL
, que envia um sinal que o aplicativo não pode agir para sair normalmente. Só deve ser usado como último recurso.Para eliminar o processo iniciado mais recentemente, com um soquete vinculado (uma ou outra extremidade) na porta 8080, você pode:
(assume o GNU
sort
(como encontrado no macOS) e umaps
implementação que suporta alstart
coluna (como o macOS e o procps-ng, embora o código precise ser atualizado para o processo onde os campos mês e dia são trocados)).fonte
Porque quando você digitou o comando, você não digitou
você digitou ou similar. Isso não tinha nada a ver com o nome do script, ou mesmo que era um script em primeiro lugar. Você poderia ter conseguido o mesmo efeito com um comando totalmente inexistente: O analisador do shell esperava mais entradas para concluir o único comando parcialmente completo. Seu pensamento sobre o nome do script é um arenque vermelho completo.fonte
killl $(
por algum motivo e é muito improvável que ele tenha feito isso. A resposta de Stéphane Chazelas é mais provável.`
é mais provável que$(
.`
não é provável, pois não fornece o mesmo prompt . Tente. Não, Herhtar; não é uma suposição ao digitar isso ou semelhante, é o caminho para obter esse prompt . É uma dedução.killl
digitou" quando, como explica Stéphane Chazelas, é inteiramente possível que o OP realmente digitoukilll
. Portanto, votei sua resposta como incorreta.