【问题标题】:Execute Shell file functions in Mac在 Mac 中执行 Shell 文件功能
【发布时间】:2020-09-16 02:06:50
【问题描述】:

我有以下包含这个的 shell 文件:

sh
nightlyTag() {
    echo $1-alpha.$(date +%Y%m%d).$(($(date +%s%N)/1000000))
}

yarnPubCanaryVersion() {
    if [ -z "$1" ]
    then
        echo "No version argument supplied, maybe you meant v1.0.0?"
        return 1
    fi
    version=`nightlyTag $1`
    yarn version --new-version $version --no-git-tag-version
    npm publish --tag canary
    git reset --hard HEAD
}

我用chmod +x canary.sh 使文件可执行,然后我运行它./canary.sh 然后我的终端更改为sh-3.2$ 然后我尝试像这样nightlyTag 在终端中运行函数,我得到了

sh: nightlyTag: 找不到命令

yarnPubCanaryVersion 也一样。

我在看这个SO question

【问题讨论】:

  • 您将sh 用作第一个命令。我不知道你为什么这样做,但此时尚未定义函数,因为它们的定义是在 sh 命令之后进行的。因此,至少,sh 必须是最后一个命令。但是如果你非常喜欢 sh 作为一个 shell,为什么不把它作为你的登录 shell,并source函数定义。

标签: macos shell terminal


【解决方案1】:

运行脚本后,您将无法从终端运行函数。

您需要获取脚本来执行此操作:

source ./canary.sh

或者将文件的内容添加到 .bashrc 文件或其等效文件中,然后对其进行 source 处理。

source 命令用于将任何函数文件加载到当前 shell 中。

现在,一旦您调用这些函数,您将获得预期的输出。

在您的 sh 文件的顶部,您需要包含:

#! /path/to/bash 

您正在使用的 bash 的路径。

【讨论】:

  • 那行不通。我得到与做 ./canary.sh 相同的结果,我觉得它必须与这个 thorsten-hans.com/…
  • 是的,我不确定 Mac 系统,但您的终端应该仍然有一个 .bashrc 文件。在里面你可以直接发布你的 .sh 文件的内容,然后一旦你找到它就可以工作了。
  • @devpato 在您的 sh 文件顶部,您需要包括:#! /usr/bin/bash 或您正在使用的 bash 的路径。
  • @devpato 我很高兴能提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
相关资源
最近更新 更多