為了解決特定問題,我正在嘗試stealth mode使用macosbash進行切換
以下是部分代碼:
STEALTH_STATUS=$(/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode)
if [ "$STEALTH_STATUS" = "Stealth mode enabled" ]; then
/usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode off
else
/usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
fi
一切看起來都不錯(對嗎?),但它不起作用。對于除錯,我將對條件的反應更改為Trueand False:
STEALTH_STATUS=$(/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode)
if [ "$STEALTH_STATUS" = "Stealth mode enabled" ]; then
echo "True"
else
echo "False"
fi
(如果我們使用 a $STEALTH_STATUSwithout ",我們會得到一個錯誤line 2: [: too many arguments)
并且在執行這段代碼的時候,總是get False,這說明執行要設定的函式的結果$STEALTH_STATUS不等于"Stealth mode enabled"
但是如果我們在 shell 中運行命令,我們可以確保模式現在是啟用的
$ /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode
> Stealth mode enabled
只是另一個檢查以確保
STEALTH_STATUS=$(/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode)
STRING="Stealth mode enabled"
echo $STEALTH_STATUS
echo $STRING
if [ "$STEALTH_STATUS" = "$STRING" ]; then
echo "True"
else
echo "False"
fi
而我們得到...
> Stealth mode enabled
> Stealth mode enabled
> False
有人可以解釋我哪里出錯了嗎?
uj5u.com熱心網友回復:
來自的回應STEALTH_STATUS=$(/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode)包含一個尾隨空格,因此您的if檢查失敗。您可以通過檢查字串的長度來查看它。修剪空白的一種機制是通過管道傳輸到 xargs。
這是您的腳本的修改版本:
#!/bin/bash
current_status="$(/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode | xargs)"
enabled="Stealth mode enabled"
echo "${current_status} length: ${#current_status}"
echo "${enabled} length: ${#enabled}"
if [ "$current_status" = "$enabled" ]; then
echo "True"
else
echo "False"
fi
輸出:
$ ./script
Stealth mode enabled length: 20
Stealth mode enabled length: 20
True
沒有管道輸出到 xargs:
$ ./script
Stealth mode enabled length: 21
Stealth mode enabled length: 20
False
(注意,您可能還希望避免根據 bash 腳本最佳實踐對變數名使用全大寫)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486238.html
下一篇:我怎樣才能結合命令離開和說?
