「killl」という名前のスクリプトが失敗するのはなぜですか?


12

問題のスクリプトは、localhostポート8080で最新のプロセスを終了します。

#!/bin/bash
x=$(lsof -i:8080 | tail -1 | awk '{print $2}')
kill -9 $x

スクリプトの名前が「killl」の場合、機能しませんでした(取得しますか、最新のものを削除しますか?)。cmdsubst> スクリプトの名前を「asdf」に変更するように促されましたが、すべて正常に機能します。この動作の説明はありますか?MacOS ElCapitánを使用しています。


5
別の関数、エイリアス、ユーティリティ、またはその他のコマンドがありkilllますか?
クサラナナンダ

9
名前を曖昧にしないでください。killlスペルが間違っていると誤解される可能性がありますkill。明示的でわかりやすい方が良いでしょう:kill_latestまたはkill_last
セザール

6
type killl起動しようとしたシェルの出力は何ですか?
ホークレイジング

回答:


27

cmdsubst>zshコマンド置換の終了が入力されるのを待っているときにシェルが出力する2次プロンプトです。

を入力した直後にそのプロンプトが表示された場合killl<Return>、合理的な説明は、次のように、終了killlしない$(...)コマンド置換を含むものに展開するエイリアス(文字列マクロ展開の何らかの形式)があることです

$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>

zshその$(...)コマンド置換を閉じるように求めているのはどこですか。

さらにいくつかのメモ:

  • の出力はlsofpidでソートされます。pid番号はラップされます。より大きいpidは、プロセスが後で開始されたことを保証するものではありません。
  • -i:8080 8080ポートを送信元ポートまたは宛先ポートとして持つTCPまたはUDPソケットを、それがリッスン、受け入れ、または接続ソケットのいずれであるかを報告します。
  • pidのみを取得する場合は、次の-tオプションを使用できますlsoflsof -ti:8080 | tail -n2
  • kill -9isはkill -s KILL、アプリケーションが正常に終了するように動作できないという信号を送信します。最後の手段としてのみ使用してください。

ポート8080で(どちらかの端に)ソケットがバインドされている最も最近開始されたプロセスを強制終了するには、次のようにします。

#! /bin/sh -
unset IFS
pids=$(lsof -ti:8080) &&
  LC_ALL=C ps -o pid=,lstart= -p $pids |
  LC_ALL=C sort -k6,6n -k4,4M -k3,3n -k5,5 -k1,1n |
  awk 'END{system("kill " $1)}'

(GNU sort(macOSにあります)および列psをサポートする実装lstart(macOSおよびprocps-ngのように、月と日フィールドがスワップされるprocps-ngのコードを更新する必要がありますが)を想定しています)。


1

それは私にプロンプ​​トを与えました cmdsubst>

コマンドを入力したときに入力しなかったため

殺す
入力した

killl $(
または類似。これは、スクリプトの名前何の関係もありませんでした。あるいは、そもそもそれがスクリプトだったということでもありません。完全に存在しないコマンドで同じ効果を達成できた可能性があります。

Zeick $(
シェルのパーサーは、部分的に完了した唯一のコマンドを完了するためにより多くの入力を期待していました。スクリプト名についてのあなたの考えは完全なニシンです。


6
それは彼killl $(が何らかの理由でタイプしたと言うのはかなり大きな仮定であり、彼がそうした可能性は非常に低い。StéphaneChazelasの答えは、本当らしい。
ヘロタール

1
それが実際にタイプミスによるものである場合、の`可能性が高くなり$(ます。
エミールイェジャベクはモニカをサポートします

2
いいえ、エミル・イェジャベク。それは同じプロンプトを与えない`ので、まったくそうではありません。それを試してみてください。いいえ、ハータール。それはタイピングその仮定ではありませんまたは類似であることが、プロンプト取得する方法。それは控除です。
JdeBP

1
OPは「タイプしなかった」と断言しますが、killlStéphaneChazelasが説明するように、OPが実際にタイプした可能性は完全にありますkilll。したがって、あなたの答えを間違っていると断言しました。
ケビン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.