我正在使用firewall-cmd 设置防火墙,但一直输入firewall-cmd 就需要花费大量时间。
是否可以创建临时的“虚拟”shell 或者将防火墙命令附加到每个以下输入之后的东西?
例子 :
$ coolcommand firewall-cmd
> --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
[.....]
> --add-service https
> ^C
$
谢谢
答案1
带有 的循环eval
,如下所示:
coolcommand () { while IFS= read -rep "> $1 " line; do eval "$1 $line"; done; }
然后coolcommand firewall-cmd
像您的示例中那样调用。
注意firewall-cmd
会“粘”到您输入的每一行开头,但评估结果字符串的仍然是 shell。因此 $
,*
、 、;
、#
、 引号等仍然是特殊的。特别是在 之后coolcommand firewall-cmd
,输入--list-all; date
将运行firewall-cmd --list-all
and date
(而不是firewall-cmd date
)。
改进以获得更好的体验:
也可以传递带有参数的命令。例如:
coolcommand 'printf "foo %s\n"'
与脚本相同。添加了历史记录支持:
#!/bin/bash unset HISTFILE HISTCONTROL=ignoreboth while IFS= read -rep "> $1 " line; do history -s "$line" eval "$1 $line" done
当脚本即将退出时,历史记录不会被保存,但在单次调用期间它仍然应该可以工作(↑/↓就像在 Bash 中一样)。