web-dev-qa-db-ja.com

各コマンドにコマンドを追加します(たとえば、デフォルトで各コマンドをプロキシチェーンします)

別のコマンドが事前に追加された各コマンドを実行するにはどうすればよいですか?

私が実行したときの例:

nmap -p 80 Host

走らせたい

proxychains nmap -p 80 Host

意図的にproxychainsを追加しなくても。

言い換えると、proxychainsを事前に追加して、すべてのコマンドに一度にエイリアスを設定できますか?

これが私がオン/オフを切り替えることができるものであればボーナス。

2
AK_

proxychainsの下で完全なシェルを実行するだけで機能しますか?シェルによって開始されたプロセスを適切に処理できると仮定します。

あなたはただで行うことができます

$ proxychains bash

シェルを自由に終了します。


ただし、本当に必要な場合は、DEBUGトラップ(extdebugを設定)を悪用して、シェルが実行するコマンドをマングルすることができます。これにより、すべてのコマンドがtimeで実行されます。

$ shopt -s extdebug
$ d() { eval "time $BASH_COMMAND"; return 1;  }
$ trap d DEBUG
$ sleep 2

real    0m2.010s
user    0m0.000s
sys     0m0.000s
$ trap - DEBUG         # turn it off, this still prints the 'time' output

ただし、ここで注意が必要なのは、trapshopt自体などの組み込み関数にも影響するため、それらにいくつかの例外を追加することをお勧めします...また、cd somedirなどはproxychains cd somedirになり、おそらく機能しません。これは、関数内などから開始されるすべてにも影響します。関数にproxychainsを必要とすることがわかっているコマンドに対してのみ使用させる方がよい場合があります。

6
ilkkachu

現在のセッションのエイリアスを作成するだけです。

alias nmap="proxychains nmap"

Nmapを作成するたびに、「proxychainsnmap」を作成するようになります。あなたはそれをオフにすることができます:

unalias nmap

これを管理するシェルスクリプトを作成することもできます。 bashrcに追加するだけです

function prefix {
if [ $2 != "with" ]; then
    echo "You have to prefix something with something"
    return
fi
echo "alias $1 = $3 $1"

alias $1="$3 $1"
}
function unprefix {
    alias $(alias $1 | sed "s/=.\b.*\b /='/g")
}

だからあなたはすることができます:

prefix nmap with proxychains
unprefix nmap
1
Blasco