覆盖at_exit方法

时间:2015-08-09 19:47:04

标签: ruby bash

我试图在bash中为我的dotfiles写一个无人参与的安装脚本,它在开始时要求sudo一次并在整个过程中保持活着状态。不过,我在安装Homebrew时遇到了一些障碍。

事实证明install script附带了这个:

at_exit { Kernel.system "/usr/bin/sudo", "-k" }

由于sudo -k无条件杀死了sudo超时,因此我不知道该选项。我对Ruby的知识非常接近,但我觉得我最好的办法是在调用时尝试从安装脚本之外覆盖at_exit。我不知道是否可能,我的谷歌技能让我失望了。

我像这样调用安装脚本:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null

如果可能的话,我想避免分支脚本并且必须保持最新,所以任何提示或解决方法都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

在执行之前,您可以使用sed从脚本中删除该行:

sed 's/at_exit.*sudo.*-k.*$//'

作为完整的命令行:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install | sed 's/at_exit.*sudo.*-k.*$//')" < /dev/null

答案 1 :(得分:1)

如果您仍想在Ruby方面执行此操作,则可以通过再次定义它来覆盖at_exit方法。

def at_exit(*);end;

所以你可以用这种方式调用安装脚本:

ruby -e "def at_exit(*);end;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null