Bash「虛擬」前綴終端

Bash「虛擬」前綴終端

我正在使用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像您的範例中那樣調用。

Notefirewall-cmd會「黏在」您鍵入的每一行的開頭,但仍然由 shell 計算結果字串。所以 $,,,,,引號*之類;#還是很特殊的。特別是在 後coolcommand firewall-cmd,鍵入--list-all; date將運行firewall-cmd --list-alldate(而不是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 中通常那樣)。

相關內容