如何让npm bin -g仅输出路径?解决脚本干扰问题
解决
npm bin -g 输出额外内容导致脚本出错的问题 我之前也碰到过这个糟心的问题!npm的这些额外提示和通知真的很容易搞砸脚本逻辑,这里有几个靠谱的解决办法:
方法1:用npm自带的静默参数抑制额外输出
npm本身提供了官方参数来关闭非必要的日志和提示,直接加上--silent或者--quiet就能只拿到纯净的全局bin路径:
GLOBAL_BIN_PATH=$(npm bin -g --silent)
这个方法最推荐,因为是官方支持的方式,能彻底屏蔽升级通知、PATH环境变量提示这类额外输出,只保留你需要的核心路径。
方法2:重定向stderr到/dev/null
如果因为npm版本过旧等原因没法用--silent,可以利用shell的重定向特性,把错误输出(也就是那些提示信息)直接丢弃,只保留标准输出的路径:
GLOBAL_BIN_PATH=$(npm bin -g 2>/dev/null)
这里的2>/dev/null是把stderr(文件描述符2)的内容重定向到/dev/null,这样脚本变量只会拿到正确的路径,那些烦人的提示既不会干扰脚本执行,也不会出现在终端输出里。
为什么你之前的方法没起作用?
你用head -n 1还是能看到第二行提示,是因为那些提示是通过stderr输出的,head只处理stdout的内容,所以stderr的提示依然会显示(但其实这时候变量已经拿到正确路径了,只是终端输出会乱)。而你尝试的npm bin -g > /dev/null是把stdout也丢了,变量自然就为空,脚本肯定会报错。
内容的提问来源于stack exchange,提问作者totymedli
相关产品推荐
相关产品推荐

