Firewall-cmd를 이용하여 방화벽을 설정하고 있는데, 항상 Firewall-cmd만 입력하는 것만으로도 시간이 많이 걸립니다.
임시 "가상" 셸을 만들거나 다음 각 입력에 방화벽 cmd를 추가하는 것이 가능합니까?
예 :
$ 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
그런 다음 귀하의 예와 같이 호출하십시오 .
Note는 firewall-cmd
입력하는 모든 줄의 시작 부분에 "접속"되지만 결과 문자열을 평가하는 것은 여전히 셸입니다. 그래서 $
, *
, ;
, #
, 따옴표 등은 여전히 특별합니다. 특히 다음에 coolcommand firewall-cmd
입력하면 및 (가 아님 )이 --list-all; date
실행됩니다 .firewall-cmd --list-all
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의 일반적인 방식과 동일).