Bash
在帶有可選信號的腳本中使用 xargs 和 kill
用於終止某個埠上的伺服器的腳本:
#!/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
但是,如果我想做 a
kill -9
我會做:killbyport 4242 9
,並且錯誤:kill: (-9): No such process
xargs
和不合作 - 我該kill
如何解決?(PS:我想修復此腳本,而不是將其更改為其他內容。它幾乎可以工作。)
問題是你明確地添加了一個空格
SIGNAL
:SIGNAL=" -${SIGNAL}"
然後用引號引用它:
殺死**“$SIGNAL”**
因為
kill
is 看到一個不以破折號開頭的參數(因為它以空格開頭,然後是破折號),所以它不被視為一個選項,而是一個普通的參數——在這種情況下是一個 PID。一個快速的解決方法是不將空間添加到SIGNAL
:SIGNAL="-${SIGNAL}"
SIGNAL
但是,當它為空時,這是沒有意義的。見但如果……怎麼辦?. 第一個範例 (ignorecase
) 幾乎完全符合您的情況。