我正在自动安装NFS服务器。 在启动防火墙之前,我要检查:
systemctl status firewalld
Firewall status: ● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago
Main PID: 129969 (firewalld)
CGroup: /system.slice/firewalld.service
└─129969 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
1)需要取消防火墙的屏蔽
2)防火墙死掉了
为此我执行
STATUS=`systemctl status firewalld`
echo "Firewall status: ${STATUS}"
MASKED=`grep -e "masked" $STATUS`
DEAD=`grep -e "dead" $STATUS`
但是,grep命令失败,并显示以下信息:
grep: unrecognized option '--nofork'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
grep: unrecognized option '--nofork'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
grep在以下模式上失败:--nofork grep认为这是一个选择
我阅读了各种文章,但没有找到解决此问题的方法。 我以为我可以使用“ sed”删除“-”,但是它却出现相同的错误
干杯, 罗兰
答案 0 :(得分:2)
$STATUS
是字符串,而不是文件名。在POSIX Shell中,尝试:
MASKED=$(printf "%s" "$STATUS" | grep -e "masked")
在bash中,可以使用here-string消除管道:
MASKED=$(grep -e "masked" <<<"$STATUS")
对于您的shell变量,最好使用小写或大小写混合形式。系统使用所有大写作为其变量,并且您不想意外地覆盖其中的一个。
除非您明确希望外壳程序执行扩展,包括分词或 pathname扩展,否则请将所有shell变量放在双引号中。
观察到这会产生您看到的错误:
$ Status="Firewall status: ● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago
Main PID: 129969 (firewalld)
CGroup: /system.slice/firewalld.service
└─129969 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid"
$ grep -e "running" $Status
grep: unrecognized option '--nofork'
Usage: grep [OPTION]... PATTERN [FILE]...
但是,这两个版本均可工作:
$ printf "%s" "$Status" | grep -e "running"
Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago
$ grep -e "running" <<<"$Status"
Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago