bash - Bash:在变量赋值中找不到命令并且文件名太长
问题描述
我在我的 bash 脚本中执行以下任务,但在不内联执行时不断收到奇怪的错误。
有效的原创
$DB_ENV = $(echo "$(cat .dbenv)" | tr '\n' ' ')
echo "CACERT=\"$(cat .cacert)\" $DB_ENV" yarn run knex migrate:up | bash -
新的没有
#!/bin/bash
$DB_ENV=$(echo $(cat .env) | tr '\n' ' ')
$CACERT="CACERT=\"$(cat .cacert)\""
if [[ $1 != 'up' && $1 != 'down' ]]; then
echo Available subcommands are "up" and "down"
else
echo "$CACERT $DB_ENV yarn run knex migrate:$1" | bash -
fi
出于某种原因,在我得到的第一个变量赋值行
migrate.sh: line 3: =NODE_ENV="production": command not found
第二个
migrate.sh: line 4: =CACERT="<file contents with newlines>": File name too long
对为什么会发生这种情况感到非常困惑,任何帮助都会很棒!
解决方案
你至少有两个错误:
$
分配给变量时,您不应该在变量前面。- 不要在 assignments 的两侧放置空格
=
。
例如,您的第一行应该是
DB_ENV=$(echo "$(cat .dbenv)" | tr '\n' ' ')
推荐阅读
- excel - 什么会导致应该评估为 False 的条件在 VBA 中评估为 True?
- html - 为什么 Amazon SES 模板已损坏?
- c++ - Igraph makevars 不会链接到静态库,我可以使用数据结构,但在导入 igraph c++ 库时不能运行
- docker-compose - mysql docker 容器无法在 Windows 上启动。错误:mysql以代码1退出。有人可以帮我吗?
- javascript - 如何使用内容安全策略安全地嵌入 Twitter 小部件
- ios - 需要在 swift 中构建类似 Instagram 的文本功能
- javascript - 改进 javascript 数字舍入
- vba - 如何使用 VBA 宏从 Web 服务器下载文件并将其保存到特定位置?
- git-bash - 将文件移动到 Git Bash 上的另一个文件夹
- android - 禁止访问二进制存储库