有没有用 go 或者 python 代替 shell 脚本的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
pc10201
V2EX    程序员

有没有用 go 或者 python 代替 shell 脚本的?

  •  
  •   pc10201 2016-09-27 16:53:43 +08:00 12847 次点击
    这是一个创建于 3379 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自己熟悉 python
    感觉 shell 可读性太差了一些~
    有没有用 go 或者 python 代替 shell 脚本的?

    用 python 的可能会用到一些第三方库,而且 python 2 和 python 3 还有点小区别

    用 golang 直接生成二进制文件,扔上去就完了~
    54 条回复    2016-11-23 10:52:16 +08:00
    Karblue
        1
    Karblue  
       2016-09-27 17:05:52 +08:00
    有时候几行 shell 可以做的事情。你偏偏得装个环境编译一下。
    fuxiaohei
        2
    fuxiaohei  
       2016-09-27 17:10:44 +08:00
    python 一般系统都带有,直接用吧
    Tink
        3
    Tink  
    PRO
       2016-09-27 17:11:52 +08:00 via iPhone
    代替是指?

    要是自动转换的话感觉不如用 python 再写一遍
    subpo
        4
    subpo  
       2016-09-27 17:14:39 +08:00
    我都用 node 或者 ruby, 会啥用啥呗
    BOYPT
        5
    BOYPT  
       2016-09-27 17:15:37 +08:00
    python 里面各种写 os.system("xxx")
    janxin
        6
    janxin  
       2016-09-27 17:48:36 +08:00
    @BOYPT 你得到了它
    gouchaoer
        7
    gouchaoer  
       2016-09-27 19:03:31 +0:00 via Android
    php 可以 exec system shell_exec passthrough pcntl_exec pcntl_exec escapeshellcmd popen 执行 shell , php 又赢了
    mxi1
        8
    mxi1  
       2016-09-27 19:06:50 +08:00 via iPhone
    好像有一个 python shell ,叫 xonsh ?
    rrfeng
        9
    rrfeng  
       2016-09-27 19:07:35 +08:00   1
    三种都用。
    shell 写经常需要改,不太复杂的。简单省事。比如 cp mv rm 日志 之类的。
    python 写稍微复杂一点,需要比较复杂的数据结构的, shell 很难处理的。比如涉及到 json 。
    go 写更复杂的,一般用 python 需要额外安装第三方库,或者对并发有要求的。但是一般会写的通用一点,而不是单一功能。扔到服务器上再用 shell 传参调用。
    KiriGiri
        10
    KiriGiri  
       2016-09-27 19:15:44 +08:00
    @mxi1 我就是用的这个
    lairdnote
        11
    lairdnote  
       2016-09-27 19:23:14 +08:00
    python 还行点。。。但是 golang 比较麻烦的是 bin 文件太大。。感觉还是做项目做比较好
    Ixizi
        12
    Ixizi  
       2016-09-27 19:23:58 +08:00
    简单执行任务用 shell
    涉及到数据处理 python


    但是通常是 python shell 互相调。。。
    ethego
        13
    ethego  
       2016-09-27 19:28:23 +08:00
    https://github.com/elves/elvish 混合了 shell 和 go 的语法,非 POSIX
    wizardforcel
        14
    wizardforcel  
       2016-09-27 19:31:36 +08:00
    直接在终端输入的话我用 shell ,但是写到文件里必然用 python 。
    mxi1
        15
    mxi1  
       2016-09-27 20:23:02 +08:00 via iPhone
    @KiriGiri 你在 Linux 还是 macOS 上用的?有什么烦人的问题吗?
    PyPog
        16
    PyPog  
       2016-09-27 20:25:07 +08:00 via Android
    一般是啥好实现用啥,管他 Python 还是 Shell
    adbaiducom
        17
    adbaiducom  
       2016-09-27 20:38:44 +08:00
    好几种语言混在一起用,项目人一多特别明显
    cxbig
        18
    cxbig  
       2016-09-27 20:53:29 +08:00
    什么顺手用什么,语言不重要。。。
    KiriGiri
        19
    KiriGiri  
       2016-09-27 21:10:43 +08:00
    @mxi1 Linux 上的
    问题基本不大,以前烦人的问题在新版里基本都解决了, shell 语法和 python 语法也融合得蛮好。
    扩展语法需要一点时间学习和适应,特别是 python 模式和 subprocess 模式之间的转换,好在官网的教程还比较详细,不过有些细节的东西还需要自己琢磨。
    还有如果需要补全功能的话要安装 prompt-toolkit ,高亮要 pygments 。
    SuperMild
        20
    SuperMild  
       2016-09-27 21:46:19 +08:00 via iPad
    loading
        21
    loading  
       2016-09-27 21:57:12 +08:00 via Android
    我目前担忧的是我几台内核还是 2.4 的能不能跑 golang...
    scnace
        22
    scnace  
       2016-09-27 22:31:34 +08:00 via Android
    自从用了 CLI 总喜欢用 go 撸一些 Terminal 小工具。 跨平台真是太好了 机油也想用的话 直接编译一份二进制文件给他就好了
    Karsa
        23
    Karsa  
       2016-09-27 23:15:03 +08:00 via iPhone
    有啊有啊
    LazyZhu
        24
    LazyZhu  
       2016-09-28 02:22:35 +08:00
    @scnace
    同感, golang 做跨平台太简单了,基本依赖库都支持的,就是二进制太大了, 1.7 改进了很多,但相对 C/C++仍然很巨大,特别对于空间较敏感的嵌入开发。
    scnace
        25
    scnace  
       2016-09-28 02:25:33 +08:00 via Android
    @LazyZhu 还有 golang 做嵌入式开发的吗? 话说我的树莓派已经吃灰好久了 233 (cgo 估计接下来的版本支持还会越来越好~
    sherlocktheplant
        26
    sherlocktheplant  
       2016-09-28 02:28:25 +08:00
    python 写起来会简单点 学习成本也没那么高 而且有很多现成的库 基本常见 shell 命令做得事情 python 都能找到对应的库
    jiazhoulvke
        27
    jiazhoulvke  
       2016-09-28 04:21:19 +08:00
    @LazyZhu
    @lairdnote
    go 用 strip 和 upx 处理一下其实也不大,我一个 10M 的程序可以压到 2.2M
    sinxccc
        28
    sinxccc  
       2016-09-28 05:08:37 +08:00
    这种事情其实还是 Perl 最适合,可惜现在愿意学的人少了…
    xiaket
        29
    xiaket  
       2016-09-28 07:06:33 +08:00
    @sinxccc 可读性差所以不适合吧。很常见的场景是需要改下之前的脚本加个小功能,然后读旧脚本 perl 需要的时间是 python 的两三倍吧?
    hanxiV2EX
        30
    hanxiV2EX  
       2016-09-28 08:11:34 +08:00 via iPhone
    Shell 能解决的尽量会用 Shell 。强大的管道绝对。复杂点的用 Python 。
    argsno
        31
    argsno  
       2016-09-28 08:11:46 +08:00 via Android
    在一些不复杂的情况下,用 shell 会合适的多。
    dsg001
        32
    dsg001  
       2016-09-28 08:20:09 +08:00
    简单的命令用 shell , 复杂的 py 搞定,至于简单与否看对 shell 的掌握程度
    anyforever
        33
    anyforever  
       2016-09-28 09:00:19 +08:00
    @PyPog +1 实用为主
    kideny
        34
    kideny  
       2016-09-28 09:34:16 +08:00
    感觉正则学好了,用啥都行吧。。。 O(∩_∩)O
    yanzixuan
        35
    yanzixuan  
       2016-09-28 11:01:09 +08:00
    很早就有过一本书,讲用 Python 做系统管理的。
    你练熟了就可以直接替代 shell 了。。。
    winkidney
        36
    winkidney  
       2016-09-28 11:01:26 +08:00
    借宝地推销一下自己的命令行库~(兼容 Py2/3 )

    https://github.com/winkidney/cmdtree
    araraloren
        37
    araraloren  
       2016-09-28 11:03:36 +08:00
    ~~简单的事情还是 shell 方便一个两个命令就 OK 了
    复杂一点就要求助脚本了,这东西都是互相结合使用。。
    wweir
        38
    wweir  
       2016-09-28 12:57:37 +08:00
    目前在用 go 维护一个运维调度平台。
    平时用的啥的还是 bash 脚本吧
    PS :是 bash 不是 shell
    fuxpro
        39
    fuxpro  
       2016-09-28 23:26:31 +08:00
    我不是出来唱反讽的, 但是说实话, 如果是运维功能的东西, 我推荐还是用系统默认的 Shell , 是本真的也是最稳定的。做得好了也会是最直接和高效的
    hobbyliu
        40
    hobbyliu  
       2016-09-29 06:01:48 +08:00 via Android
    @gouchaoer 你赢了
    kideny
        41
    kideny  
       2016-09-29 10:46:54 +08:00
    shell debug 困难,不是很现代的语言。
    只能用来写一些简单的东西了。。。
    xiaq
        42
    xiaq  
       2016-09-29 14:59:50 +08:00 via iPad
    @ethego elvish 是用 go 实现的,不过语法上和 go 没有什么关系。
    ethego
        43
    ethego  
       2016-09-29 15:23:08 +08:00
    @xiaq 原来是作者,失敬失敬。。
    xiaq
        44
    xiaq  
       2016-09-29 16:12:40 +08:00 via iPad
    @ethego 客气了,多谢安利 elvish 大法 (**)
    sutra
        45
    sutra  
       2016-09-30 17:17:20 +08:00
    说到这个环境的问题,我宁可用古老的 awk 来写。
    kotokz
        46
    kotokz  
       2016-10-09 13:11:20 +08:00
    awk or perl
    ethego
        47
    ethego  
       2016-11-08 23:49:43 +08:00
    @xiaq 想请教您一些编译原理相关的问题,不知道能留一下联系方式。。
    xiaq
        48
    xiaq  
       2016-11-09 10:00:11 +08:00 via iPad
    @ethego 在 v2 发帖问然后 @ 我?
    ethego
        49
    ethego  
       2016-11-10 15:12:12 +08:00
    @xiaq 那我直接在这里问吧。。在递归下降的解释器中如何实现 call/cc ?因为我不是 cs 出身,所以这个问题我想了蛮久的。。因为我自己也在做一些简单的解释器。好像必须要将解释器完全地转写成尾递归的形式才能做到?不然没办法 stop the world.
    ethego
        50
    ethego  
       2016-11-10 15:14:26 +08:00
    @xiaq 在一般的递归下降的解释器中,函数总是带有状态的,所以在遇到 call/cc 时候没法保存整个解释器的上下文,需要转写成尾递归的形式将状态一层层传递进来才行。不知道我的理解有没有问题。。
    xiaq
        51
    xiaq  
       2016-11-11 09:44:13 +08:00 via iPad
    @ethego 抱歉,我不懂递归下降的解释器……
    ethego
        52
    ethego  
       2016-11-14 11:03:28 +08:00
    @xiaq 所以 elvish 是传统的基于栈线性解释的吗?
    xiaq
        53
    xiaq  
       2016-11-23 09:20:58 +08:00 via iPad
    @ethego 这么说起来 elvish 解释器应该 递归下降的。。 call/cc 我也不知道怎么实现。编译解释技术我不太在行啦。
    ethego
        54
    ethego  
       2016-11-23 10:52:16 +08:00
    @xiaq 还有就是非常喜欢你的珠玑,打算在你的设计上自己做一个
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5524 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 01:47 PVG 09:47 LAX 17:47 JFK 20:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86