【问题标题】:how to fix `command not found` in bash scripting?如何修复 bash 脚本中的“找不到命令”?
【发布时间】:2022-12-08 09:26:49
【问题描述】:

我想创建一个 bash 函数来在调用时加载某些环境变量,但我收到错误 loadenv:4: = not found。此函数以及变量 DEV_ENVIRONMENT_NAME, DEV_ENVIRONMENT_DIRECTORY, PROD_ENVIRONMENT_NAME and PROD_ENVIRONMENT_DIRECTORY 是在我的 .zshrc 文件中定义的,因此导出的变量在我运行该函数的 bash 会话中可用。但我不知道我提到的错误意味着什么。

function loadenv() {
  environment=$1
  envname=""
  envdir=""
  if [ "$environment" == "dev" ]
  then
    echo "Assuming development credentials"
    envname="$DEV_ENVIRONMENT_NAME"
    envdir="$DEV_ENVIRONMENT_DIRECTORY"
  elif [ "$environment" == "prod" ]
  then
    echo "Assuming production credentials"
    envname="$PROD_ENVIRONMENT_NAME"
    envdir="$PROD_ENVIRONMENT_DIRECTORY"
  fi
  if [[ -z $envname || -z $envdir ]]
  then
    echo "Credentials for $environment not properly configured"
    return 1
  else
    export APP_ENVIRONMENT="$envname"
    export APP_DIRECTORY="$envdir"
    return 0
  fi

  echo "Environment '$environment' not valid"
  return 1
}

【问题讨论】:

  • 你提到.zshrc。那么你是用bash还是zsh来运行这个脚本?
  • 您正在使用一些特定于 bash 的语法,这在 zsh 中可能不起作用。比如function命令定义一个函数,[中用==代替=
  • 当您尝试将 == 用作 [ ] 测试表达式中的运算符时,zsh 会说这个相当神秘的错误。 = 是该上下文中正确的比较运算符(尽管 bash 容忍 == 作为非标准同义词)。

标签: bash environment-variables


【解决方案1】:

错误来自于两种形式bash 逻辑表达式是 (带有单个“=”的单括号),

if [ "$environment" = "dev" ]

或者 (带“==”的双括号),

if [[ "$environment" == "dev" ]]

如果该脚本是,那么你需要有

#!/bin/bash

作为脚本的第一行,无论环境如何,它都能正常工作。

另外,一定要不是来源该脚本到您的 zsh 中。否则,它不会像 bash 一样执行。

【讨论】:

  • 看起来这是为了在调用 shell 中定义函数(可能还有变量),这意味着它必须使用source 运行(并且任何 shebang 行都将被忽略)。
猜你喜欢
  • 2013-11-10
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2015-07-01
  • 2016-10-07
  • 2016-09-13
相关资源
最近更新 更多