更新所有全局激活的包

时间:2015-02-18 13:39:42

标签: bash dart dart-pub

我想出了这个命令

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"
...

那很复杂。 有更简单的方法吗?

2 个答案:

答案 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