Objective c 如何引用打包在应用程序包中的shell脚本?

Objective c 如何引用打包在应用程序包中的shell脚本?,objective-c,xcode,bash,bundle,app-bundle,Objective C,Xcode,Bash,Bundle,App Bundle,给出两个脚本 foo.sh 酒吧 在.app包的/Contents/Resources下复制,其中foo.sh #/bin/bash . ./bar.sh 回声1美元 你得到一个错误吗 没有这样的文件或目录 在脚本尝试源代码为bar.sh的行上 有没有一种方法可以相对地引用bar.sh 是否有其他方法可以将一组bash脚本捆绑到.app中?您可以做的是: 获取存储实际运行脚本(您的foo.sh)的完整路径和目录。看 使用1中的目录调用或生成第二个脚本(您的bar.sh)。(或相对于该目录) 简单

给出两个脚本

foo.sh
酒吧

在.app包的/Contents/Resources下复制,其中foo.sh

#/bin/bash

. ./bar.sh
回声1美元

你得到一个错误吗

没有这样的文件或目录

在脚本尝试源代码为bar.sh的行上

有没有一种方法可以相对地引用bar.sh

是否有其他方法可以将一组bash脚本捆绑到.app中?

您可以做的是:

  • 获取存储实际运行脚本(您的foo.sh)的完整路径和目录。看
  • 使用1中的目录调用或生成第二个脚本(您的bar.sh)。(或相对于该目录)
  • 简单的例子:

    $cat script2
    #! /usr/bin/env bash
    echo "Hello World, this is script2"
    
    $cat script1
    #! /usr/bin/env bash
    echo "Hello World from script 1"
    echo "Full script path: $BASH_SOURCE"
    echo "extracted directory: $(dirname $BASH_SOURCE)"
    echo "running script 2"
    $(dirname $BASH_SOURCE)/script2 && echo "running script 2 successful" || echo "error running script 2"
    echo "sourcing script 2"
    source $(dirname $BASH_SOURCE)/script2 && echo "sourcing script 2 successful" || echo "error sourcing script 2"
    
    测试:


    有关更多详细讨论,请参见上面的链接…

    旧问题,但要解决最后一部分(反映当前的苹果指南):是的,您必须将所有可执行文件(包括脚本)放在捆绑包的
    MacOS
    子文件夹中:

    MacOS-(必选)包含应用程序的独立可执行代码。通常,此目录只包含一个二进制文件,其中包含应用程序的主入口点和静态链接代码。但是,您也可以将其他独立的可执行文件(如命令行工具)放在此目录中

    (来源:)

    违反这些规则将阻止您为Gatekeer成功签署应用程序包(当然还有macOS公证)

    第一部分得到了另一个答复的充分处理

    $ls /tmp/test
    script1  script2
    $pwd
    /home/michael
    $/tmp/test/script1
    Hello World from script 1
    Full script path: /tmp/test/script1
    extracted directory: /tmp/test
    running script 2
    Hello World, this is script2
    running script 2 successful
    sourcing script 2
    Hello World, this is script2
    sourcing script 2 successful