![Bash「仮想」プレフィックスターミナル](https://rvso.com/image/1607084/Bash%E3%80%8C%E4%BB%AE%E6%83%B3%E3%80%8D%E3%83%97%E3%83%AC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB.png)
私は、firewall-cmd を使用してファイアウォールを設定していますが、常に firewall-cmd と入力するだけでかなりの時間がかかります。
一時的な「仮想」シェルなどを作成し、後続の各入力にfirewall-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
例のように呼び出します。
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 で通常どおり↑/のように)。↓