V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xuegy
V2EX  ›  程序员

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

  •  
  •   xuegy · Mar 1, 2021 · 2186 views
    This topic created in 1887 days ago, the information mentioned may be changed or developed.

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

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

    网络脚本
    bash <(curl -L get.zsh.one)
    initd
        12
    initd  
       Mar 1, 2021
    有些命令 zsh 就是执行不了,
    之前用 certbot 就遇到了这种问题
    initd
        13
    initd  
       Mar 1, 2021
    建议用 ruby 写脚本,比 bash 正常多了
    xuegy
        14
    xuegy  
    OP
       Mar 1, 2021
    @TimePPT 我试过 open 了,参数传不进去。
    xuegy
        15
    xuegy  
    OP
       Mar 1, 2021
    @TimePPT 这个软件本来是 linux 上的,标准的打开方式是加 PATH 。在 mac 上要打个小补丁才能用,所以就变成这样了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2270 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 01:21 · PVG 09:21 · LAX 18:21 · JFK 21:21
    ♥ Do have faith in what you're doing.