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

求修改一小段 bash 脚本使之与 zsh 兼容

  •  
  •   xuegy · 2021-03-01 12:44:12 +08:00 · 1772 次点击
    这是一个创建于 1152 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就 4 行代码应该难不倒大佬们

        paraview () {
            local _paraviews=(/Applications/[Pp][Aa][Rr][Aa][Vv][Ii][Ee][Ww]*.app)
            $_paraviews/Contents/MacOS/paraview "$@"
        }
        export -f paraview
    

    这段只能在 bash 上跑,zsh 不认export -f,上网研究了半天,都说要把函数挪到 zshrc 里面,那就跟 bash 又不兼容了。

    15 条回复    2021-03-01 15:13:49 +08:00
    lululau
        1
    lululau  
       2021-03-01 13:12:12 +08:00
    zsh 不支持导出函数
    xuegy
        2
    xuegy  
    OP
       2021-03-01 13:37:44 +08:00
    @lululau 加 PATH 会有冲突的问题,所以才用的函数。那这个是不是无解了?
    tankren
        3
    tankren  
       2021-03-01 13:45:52 +08:00
    这一段用 bash 写,加个头#!/usr/bin/env bash
    然后 zsh 里面调用?
    xuegy
        4
    xuegy  
    OP
       2021-03-01 14:03:39 +08:00
    @tankren
    ```
    #!/usr/bin/env bash
    echo $SHELL
    ```
    结果返回
    ```
    /bin/zsh
    ```
    还是没法用
    AngryPanda
        5
    AngryPanda  
       2021-03-01 14:04:01 +08:00
    都说要把函数挪到 zshrc 里面,那就跟 bash 又不兼容了。
    ----------------
    这样如何:

    if [ "$0" == "bash" ]; then
    export -f
    fi
    AngryPanda
        6
    AngryPanda  
       2021-03-01 14:05:05 +08:00
    @xuegy $SHELL 返回的是默认 shell, $0 是当前 shell
    tankren
        7
    tankren  
       2021-03-01 14:05:35 +08:00
    @xuegy #4 结果写入文件 zsh 再去读取
    xuegy
        8
    xuegy  
    OP
       2021-03-01 14:12:52 +08:00
    @AngryPanda 这一段根本就不是可执行文件,是有另一个脚本加载这段文本,所以 hangbang 无效,$0 是空的。
    omph
        9
    omph  
       2021-03-01 14:47:01 +08:00
    独立成文件,用之前 source 一下不行么?
    TimePPT
        10
    TimePPT  
       2021-03-01 14:48:06 +08:00
    如果需求是 macOS 下快速用某 app 打开文件,直接用 open 命令得了
    initd
        11
    initd  
       2021-03-01 14:51:07 +08:00
    本地脚本
    bash a.sh

    网络脚本
    bash <(curl -L get.zsh.one)
    initd
        12
    initd  
       2021-03-01 14:57:14 +08:00
    有些命令 zsh 就是执行不了,
    之前用 certbot 就遇到了这种问题
    initd
        13
    initd  
       2021-03-01 14:58:15 +08:00
    建议用 ruby 写脚本,比 bash 正常多了
    xuegy
        14
    xuegy  
    OP
       2021-03-01 15:01:22 +08:00
    @TimePPT 我试过 open 了,参数传不进去。
    xuegy
        15
    xuegy  
    OP
       2021-03-01 15:13:49 +08:00
    @TimePPT 这个软件本来是 linux 上的,标准的打开方式是加 PATH 。在 mac 上要打个小补丁才能用,所以就变成这样了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   997 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:28 · PVG 06:28 · LAX 15:28 · JFK 18:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.