为每个命令添加一个命令(例如默认情况下代理链每个命令)

为每个命令添加一个命令(例如默认情况下代理链每个命令)

如何执行预先附加了另一个命令的每个命令?

我运行时的示例:

nmap -p 80 host

我想让它运行

proxychains nmap -p 80 host

即使我不是proxychains故意添加的。

换句话说:我可以一次为所有命令添加proxychains预先附加的别名吗?

如果这是我可以打开/关闭的东西,那就太好了。

答案1

在 下运行完整的 shell 可以吗proxychains?假设它可以正确处理 shell 启动的进程。

你可以这样做

$ proxychains bash

并随意退出外壳。


但如果您确实愿意,您可以滥用DEBUG陷阱(使用extdebugset)来破坏 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

但这里棘手的部分是,它也会影响内置函数,比如trapshopt本身,所以你可能想为这些添加一些例外...此外,类似的东西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

相关内容