我发现cabal安装包令人抓狂时的行为.例如,跑步
cabal install funsat
Run Code Online (Sandbox Code Playgroud)
安装旧版本array,time,random,quickcheck,和bitset,破包,比如monadiccp,hoogle,heist,snap,等.
它可以返回cabal install monadiccp等等,但是如何避免cabal破坏已安装软件包的默认行为?在安装新软件包时,任何合理的Linux软件包管理器,aptitude或者zypper会问我是否要破坏已安装的软件包.
有人制作了一个变通脚本吗?提前致谢.
我建议使用cabal-dev,它为您正在处理的每个项目维护一组单独的已安装软件包.这并不能解决cabal-install的不良行为,但这意味着这些故障比其他情况更加孤立,并允许您通过简单的操作更轻松地修复它们cabal-dev clean && cabal-dev install.
可重复构建的额外好处也很好.
不可否认,这不是针对您的具体问题的解决方法,但它通常会减轻阴茎安装的痛苦.
在Daniel Fischer的回答的基础上,cabal如果它将重新安装一个包,这里的包装将中止安装:
cabal () {
if [ "$1" = "install" ]; then
local out=$(command cabal --dry-run -v2 "$@" 2>&1)
if echo "$out" | egrep -c '\((reinstall|new version)\)' >/dev/null; then
echo "$out"
return 1
fi
fi
command cabal "$@"
}
Run Code Online (Sandbox Code Playgroud)
因人而异; 我只是对此进行了轻微测试,并且在启动时会导致恼人的延迟,因为所有依赖关系都必须计算两次.但如果你想保持安全,它应该减轻一些乏味.