相关疑难解决方法(0)

如何检查Bash中是否设置了变量?

我如何知道Bash中是否设置了变量?

例如,如何检查用户是否将第一个参数提供给函数?

function a {
    # if $1 is set ?
}
Run Code Online (Sandbox Code Playgroud)

variables bash shell

1417
推荐指数
23
解决办法
119万
查看次数

如何编写一个带有可选输入参数的bash脚本?

我希望我的脚本能够获取可选输入,

例如,目前我的剧本是

#!/bin/bash
somecommand foo
Run Code Online (Sandbox Code Playgroud)

但我想说:

#!/bin/bash
somecommand  [ if $1 exists, $1, else, foo ]
Run Code Online (Sandbox Code Playgroud)

bash arguments parameter-passing

425
推荐指数
8
解决办法
22万
查看次数

在npm-scripts中传递环境变量

我有一个package.json,脚本键中包含以下(简化)内容:

...
scripts: {
   "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js",
   "poststart": "echo $NODE_ENV"
}
...
Run Code Online (Sandbox Code Playgroud)

从命令行我可以运行:

npm start
Run Code Online (Sandbox Code Playgroud)

这将运行我的start-app.js脚本并将process.env.NODE_ENV环境变量设置为"production".请参阅此处获取语​​法说明.

如上所述启动后会自动开始运行后这里.

但是,poststart不会"继承"NODE_ENV shell环境变量,因此echo命令不会回显任何内容.

我的生产代码有点复杂,但我想要完成的是将NODE_ENV变量从"起点"传递给依赖脚本.关于如何做的任何建议/最佳实践?

我不想在poststart中硬编码NODE_ENV,因为我可能想要:

NODE_ENV=development npm start
Run Code Online (Sandbox Code Playgroud)

我希望每一个"沿着链条"继承同样的环境.

shell environment-variables node.js npm

34
推荐指数
2
解决办法
5万
查看次数

如何将变量的默认值设置为数组?

我最近发现,它可能有猛砸设置一个变量时变量未设置(如中描述的默认值这个职位).

不幸的是,当默认值是数组时,这似乎不起作用.作为一个例子考虑,

default_value=(0 1 2 3 4)

my_variable=${my_variable:=("${default_value[@]}")}

echo ${my_variable[0]}
(0 a  2 3 4) #returns array :-(

echo ${my_variable[1])
#returns empty
Run Code Online (Sandbox Code Playgroud)

有谁知道这是怎么回事?请注意,更改:=:-没有帮助.

另一个问题是,我们获得的任何解决方案也应该在my_variable事先已经设置的情况下工作,这样做

my_variable=("a" "b" "c")
default_value=(0 1 2 3 4)

my_variable=${my_variable:=("${default_value[@]}")}

echo ${my_variable[0]}
"a" 

echo ${my_variable[1]}
"b" 

echo ${my_variable[2]}
"c" 
Run Code Online (Sandbox Code Playgroud)

bash

6
推荐指数
1
解决办法
349
查看次数

如果未设置,请将 Bash 中导出的环境变量设置为默认值,提及一次

我正在寻找一种方法,当环境变量之前未设置为任何值(甚至是空字符串)时,才将 Bash 脚本中导出的环境变量设置为脚本中字面指定的默认值,并执行此操作无需在解决此任务的代码中多次提及环境变量的名称。

\n\n

请注意,此处此处的解决方案(使用${FOO:=42})不适用,因为它们仅设置 shell 变量,而不是导出的环境变量。我不想为单个命令设置它;我想为来自同一 shell 的所有命令设置它。

\n\n

另请注意,类似

\n\n
export FOO="${FOO:-42}"\n
Run Code Online (Sandbox Code Playgroud)\n\n

也没有回答这个问题,因为它FOO在解决方案中提到了两次。

\n\n

我意识到这个问题有一个简单的技术替代解决方案 \xe2\x80\x94 只需使用两次提到变量名称的解决方案。明确地说,“不,这是不可能的”是对这个问题的合理答案,如果它确实不可能,并且如果两次提及该变量不是问题,那么这些替代方案是完全可以的,所以它\这是一个稍微人为的问题(我只关心这个以使编辑脚本稍微更加干净和容易)。

\n

bash

5
推荐指数
1
解决办法
2909
查看次数

Docker 没有获取 Postgres 环境变量

Docker 正在使用我的 .env 文件中的变量,我不断收到错误消息:

未处理的拒绝 SequelizeConnectionError:角色“eli”不存在

我希望 Postgres 从设置的环境中获取变量 docker-compose.yml

.env

POSTGRES_PORT=5432
POSTGRES_DB=elitest4
POSTGRES_USER=eli
POSTGRES_PASSWORD=
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

# docker-compose.yml
version: "3"
services:
  app:
    build: .
    depends_on:
      - database
    ports:
      - 8000:8000
    environment:
      - POSTGRES_HOST=database
    env_file:
      - .env
  database:
    image: postgres:9.6.8-alpine
    environment: # postgress should be getting these variables, not the variables set in the env file thats for localhost
      POSTGRES_PASSWORD: password
      POSTGRES_USER: user
      POSTGRES_DB: db
    volumes:
      - pgdata:/var/lib/postgresql/pgdata
    ports:
      - 8002:5432
    env_file:
      - .env
  react_client:
      build:
        context: ./client
        dockerfile: Dockerfile
      image: …
Run Code Online (Sandbox Code Playgroud)

postgresql docker

4
推荐指数
1
解决办法
3506
查看次数

如果未设置,则在Bash中将默认值分配给变量

我知道我能做到:

echo ${var:-4}
Run Code Online (Sandbox Code Playgroud)

打印4如果var为null,

-n在这种情况下如何分配..?

echo ${var:--n} 不起作用.

虽然这确实有效..

echo ${var:---n}
Run Code Online (Sandbox Code Playgroud)

但在那种情况下它打印出来--n,我需要它打印-n.

bash

2
推荐指数
1
解决办法
1203
查看次数

设置 bash 变量 if else 中的一行

TOKEN=$(if [[ $TOKEN ]] then echo $TOKEN else cat ./cloud/token fi)
Run Code Online (Sandbox Code Playgroud)

所以我试图设置变量TOKEN。这可能是之前设置的,在这种情况下,我希望使用该值,如果没有,我希望通过捕获文件来分配它。

上面的方法不起作用,因为我缺乏 bash 技能!

bash

1
推荐指数
1
解决办法
1613
查看次数

惯用bash:设置变量的默认值

如何以简洁,惯用的方式为bash变量设置默认值?这看起来很难看:

if [[ ! -z "$1" ]]; then
    option="$1"
else
    option="default"
fi
Run Code Online (Sandbox Code Playgroud)

bash idiomatic

0
推荐指数
2
解决办法
953
查看次数

在 bash 中设置变量默认值的简单方法

我有一堆从客户端代码传递的环境变量,如果没有设置它们,我需要为它们设置默认值。

除了用大量的方法一一测试它们之外if ...; then ... fi,还有一种干净的方法可以做到这一点吗?

bash

0
推荐指数
1
解决办法
9269
查看次数