Bash

在帶有可選信號的腳本中使用 xargs 和 kill

  • March 13, 2022

用於終止某個埠上的伺服器的腳本:

#!/bin/bash

PORT="$1"
SIGNAL="$2"

if [ "${SIGNAL}" != "" ]; then SIGNAL=" -${SIGNAL}"; fi

lsof -i:"${PORT}" |\
 grep -e "localhost:${PORT}" -e TCP -e LISTEN |\
 tr -s ' ' |\
 cut -d' ' -f2 |\
 tee /dev/tty |\
 xargs --no-run-if-empty kill "$SIGNAL"

作品:killbyport 4242

但是,如果我想做 akill -9我會做: killbyport 4242 9,並且錯誤:

kill: (-9): No such process

xargs和不合作 - 我該kill如何解決?

(PS:我想修復此腳本,而不是將其更改為其他內容。它幾乎可以工作。)

問題是你明確地添加了一個空格SIGNAL

SIGNAL=" -${SIGNAL}"

然後用引號引用它:

殺死**“$SIGNAL”**

因為killis 看到一個以破折號開頭的參數(因為它以空格開頭,然後是破折號),所以它不被視為一個選項,而是一個普通的參數——在這種情況下是一個 PID。一個快速的解決方法是將空間添加到SIGNAL

SIGNAL="-${SIGNAL}"

SIGNAL但是,當它為空時,這是沒有意義的。見但如果……怎麼辦?. 第一個範例 ( ignorecase) 幾乎完全符合您的情況。

引用自:https://unix.stackexchange.com/questions/694163