V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pc10201
V2EX  ›  程序员

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

  •  
  •   pc10201 · 2016-09-27 16:53:43 +08:00 · 12008 次点击
    这是一个创建于 2767 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自己熟悉 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  
       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 +08: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   ·   我们的愿景   ·   实用小工具   ·   1318 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:50 · PVG 01:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.