我想出了这个命令
pub global list -v 2>/dev/null | awk '{split($0, a," "); printf \
"pub global activate "; if(a[8]=="") printf a[3]; else printf \
"-sgit " a[8]; print "" }' | xargs -0 bash -c
更新我所有全局激活的软件包。
pub global list -v
输出
FINE: Pub 1.9.0-edge.43835
MSG : dart_style 0.1.3
MSG : den 0.1.5
MSG : linter 0.0.1 from Git repository "git@github.com:dart-lang/linter.git"
MSG : polymer 0.15.5+1
MSG : stagehand 0.1.5+4
MSG : test_runner 0.2.16
以上命令从输出
生成这些命令pub global activate dart_style
...
pub global activate -sgit "git@github.com:dart-lang/linter.git"
...
那很复杂。 有更简单的方法吗?
答案 0 :(得分:3)
嗯,您不需要在split
中应用awk
。
另一项改进,摆脱if
contional并使用ternary
运算符(在评论中作为 Etan 解释):
awk '{var=$8==""?$3:"-sgit "$8;print "pub global activate "var }'
最后的东西应该接近:
pub global list -v 2>/dev/null |\
awk '{var= $8==""? $3: "-sgit " $8
print "pub global activate "var }'| bash -s
或者,可以在system
代码中执行awk
调用:
pub global list -v 2>/dev/null |\
awk '{var=$8=="" ? $3: "-sgit " $8
cmd="pub global activate "var
system(cmd)
close(cmd)}'
答案 1 :(得分:1)
因为我不会说bash也不流利并且对这样的功能感兴趣,所以我最终写了这个工具......在飞镖中(是的我知道它并没有真正回答这个问题,但那是我降落的地方在搜索此类功能时)
$ pub global activate pubglobalupdate
然后可以使用以下命令更新所有当前全局激活的包:
$ pubglobalupdate
它适用于linux,mac和windows! (https://github.com/tekartik/pubglobalupdate.dart)