
如何执行预先附加了另一个命令的每个命令?
我运行时的示例:
nmap -p 80 host
我想让它运行
proxychains nmap -p 80 host
即使我不是proxychains
故意添加的。
换句话说:我可以一次为所有命令添加proxychains
预先附加的别名吗?
如果这是我可以打开/关闭的东西,那就太好了。
答案1
在 下运行完整的 shell 可以吗proxychains
?假设它可以正确处理 shell 启动的进程。
你可以这样做
$ proxychains bash
并随意退出外壳。
但如果您确实愿意,您可以滥用DEBUG
陷阱(使用extdebug
set)来破坏 shell 运行的命令。这将运行每个命令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
但这里棘手的部分是,它也会影响内置函数,比如trap
或shopt
本身,所以你可能想为这些添加一些例外...此外,类似的东西cd somedir
会变成proxychains cd somedir
,这可能行不通。这也会影响从函数等内部开始的所有内容。也许最好只让该函数proxychains
仅用于那些已知需要它的命令。
答案2
您只需为当前会话创建一个别名即可。
alias nmap="proxychains nmap"
每次你写nmap时,就相当于写“proxychains nmap”。您可以通过以下方式将其关闭:
unalias nmap
您还可以创建一个 shell 脚本来管理它。只需将其添加到您的 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