如何执行带双引号的bash变量并实时获取输出
How to execute bash variable with double quotes and get the output in realtime
我有一个变量,其中有一个我想要 运行 的命令。
它有一堆双引号。当我回应它时,它看起来很漂亮。
我可以复制粘贴它 运行 就好了。
我简单地尝试了 $cmd
,但它不起作用。我收到一个错误,好像命令格式不正确。
然后我尝试通过 eval "$cmd"
或类似的方法 bash -c "$cmd"
对其进行 运行 处理,但在命令完成之前我没有得到任何输出 运行宁.
示例bash -c "$cmd"
:
这个 运行 是命令,但是在命令完成之前我没有得到任何输出 运行ning,这很糟糕,我正在尝试修复它:
cmd="docker run -v \"$PROJECT_DIR\":\"$PROJECT_DIR\" \
-v \"$PPI_ROOT_DIR/utilities/build_deploy/terraform/modules/\":/ppi_modules \
--workdir \"$PROJECT_DIR/terraform\" \
--env TF_VAR_aws_account_id=$AWS_ACCOUNT_ID \
--env TF_VAR_environment=${ENVIRONMENT} \
--env TF_VAR_region=${AWS_DEFAULT_REGION:-us-west-2} \
${OPTIONAL_AWS_ENV_VARS} \
${CUSTOM_TF_VARS} \
${TERRAFORM_BASE_IMAGE} \
init --plugin-dir=/.terraform/providers \
-reconfigure \
-backend-config=\"bucket=${AWS_ACCOUNT_ID}-tf-remote-state\" \
-backend-config=\"key=${ENVIRONMENT}/${PROJECT_NAME}\" \
-backend-config=\"region=us-west-2\" \
-backend-config=\"dynamodb_table=terraform-locks\" \
-backend=true"
# command output looks good. I can copy and paste it and run it my terminal too.
echo $cmd
# Running the command via bash works,
# but I don't get the output until the command is done running,
# which is what I'm trying to fix:
bash -c "$cmd"
这里是一个使用 bash 数组的例子。
它完美地将它打印到屏幕上,但就像 运行 像 $cmd
一样,它会抛出一个错误,就好像命令格式不正确一样:
cmd=(docker run -v \"$PROJECT_DIR\":\"$PROJECT_DIR\" \
-v \"$PPI_ROOT_DIR/utilities/build_deploy/terraform/modules/\":/ppi_modules \
--workdir \"$PROJECT_DIR/terraform\" \
--env TF_VAR_aws_account_id=$AWS_ACCOUNT_ID \
--env TF_VAR_environment=${ENVIRONMENT} \
--env TF_VAR_region=${AWS_DEFAULT_REGION:-us-west-2} \
${OPTIONAL_AWS_ENV_VARS} \
${CUSTOM_TF_VARS} \
${TERRAFORM_BASE_IMAGE} \
init --plugin-dir=/.terraform/providers \
-reconfigure \
-backend-config=\"bucket=${AWS_ACCOUNT_ID}-tf-remote-state\" \
-backend-config=\"key=${ENVIRONMENT}/${PROJECT_NAME}\" \
-backend-config=\"region=us-west-2\" \
-backend-config=\"dynamodb_table=terraform-locks\" \
-backend=true)
echo "${cmd[@]}"
"${cmd[@]}"
如何执行带有双引号的 bash 变量,但 运行 它让我实时获得输出,就像我通过 $cmd
执行一样(不起作用)
与这些问题类似,但我的问题是 运行 它并实时获取输出:
Execute command containing quotes from shell variable
Bash inserting quotes into string before execution
在您的数组版本中,由反斜杠转义的双引号成为参数的一部分,这不是预期的。
因此删除反斜杠应该可以解决问题。
我有一个变量,其中有一个我想要 运行 的命令。 它有一堆双引号。当我回应它时,它看起来很漂亮。
我可以复制粘贴它 运行 就好了。
我简单地尝试了 $cmd
,但它不起作用。我收到一个错误,好像命令格式不正确。
然后我尝试通过 eval "$cmd"
或类似的方法 bash -c "$cmd"
对其进行 运行 处理,但在命令完成之前我没有得到任何输出 运行宁.
示例bash -c "$cmd"
:
这个 运行 是命令,但是在命令完成之前我没有得到任何输出 运行ning,这很糟糕,我正在尝试修复它:
cmd="docker run -v \"$PROJECT_DIR\":\"$PROJECT_DIR\" \
-v \"$PPI_ROOT_DIR/utilities/build_deploy/terraform/modules/\":/ppi_modules \
--workdir \"$PROJECT_DIR/terraform\" \
--env TF_VAR_aws_account_id=$AWS_ACCOUNT_ID \
--env TF_VAR_environment=${ENVIRONMENT} \
--env TF_VAR_region=${AWS_DEFAULT_REGION:-us-west-2} \
${OPTIONAL_AWS_ENV_VARS} \
${CUSTOM_TF_VARS} \
${TERRAFORM_BASE_IMAGE} \
init --plugin-dir=/.terraform/providers \
-reconfigure \
-backend-config=\"bucket=${AWS_ACCOUNT_ID}-tf-remote-state\" \
-backend-config=\"key=${ENVIRONMENT}/${PROJECT_NAME}\" \
-backend-config=\"region=us-west-2\" \
-backend-config=\"dynamodb_table=terraform-locks\" \
-backend=true"
# command output looks good. I can copy and paste it and run it my terminal too.
echo $cmd
# Running the command via bash works,
# but I don't get the output until the command is done running,
# which is what I'm trying to fix:
bash -c "$cmd"
这里是一个使用 bash 数组的例子。
它完美地将它打印到屏幕上,但就像 运行 像 $cmd
一样,它会抛出一个错误,就好像命令格式不正确一样:
cmd=(docker run -v \"$PROJECT_DIR\":\"$PROJECT_DIR\" \
-v \"$PPI_ROOT_DIR/utilities/build_deploy/terraform/modules/\":/ppi_modules \
--workdir \"$PROJECT_DIR/terraform\" \
--env TF_VAR_aws_account_id=$AWS_ACCOUNT_ID \
--env TF_VAR_environment=${ENVIRONMENT} \
--env TF_VAR_region=${AWS_DEFAULT_REGION:-us-west-2} \
${OPTIONAL_AWS_ENV_VARS} \
${CUSTOM_TF_VARS} \
${TERRAFORM_BASE_IMAGE} \
init --plugin-dir=/.terraform/providers \
-reconfigure \
-backend-config=\"bucket=${AWS_ACCOUNT_ID}-tf-remote-state\" \
-backend-config=\"key=${ENVIRONMENT}/${PROJECT_NAME}\" \
-backend-config=\"region=us-west-2\" \
-backend-config=\"dynamodb_table=terraform-locks\" \
-backend=true)
echo "${cmd[@]}"
"${cmd[@]}"
如何执行带有双引号的 bash 变量,但 运行 它让我实时获得输出,就像我通过 $cmd
执行一样(不起作用)
与这些问题类似,但我的问题是 运行 它并实时获取输出:
Execute command containing quotes from shell variable
Bash inserting quotes into string before execution
在您的数组版本中,由反斜杠转义的双引号成为参数的一部分,这不是预期的。
因此删除反斜杠应该可以解决问题。