在 bash 终端中使用 Batch 参数

Posted

技术标签:

【中文标题】在 bash 终端中使用 Batch 参数【英文标题】:Using Batch argument in a bash terminal 【发布时间】:2017-08-15 03:14:50 【问题描述】:

我正在尝试在批处理脚本中执行以下操作:

@echo off
SETLOCAL

set BASHPATH="C:\Program Files (x86)\Git\bin\"
set PATH=%BASHPATH%;%PATH%
set COMMIT=%1
echo COMMIT: %COMMIT%
%BASHPATH%\bash -l -c "echo COMMIT: $COMMIT \ && git checkout -f $COMMIT \ && git submodule update -f \ && git clean -fdx \ && git submodule foreach git clean -fdx \ && call $SCRIPT_PATH\name_all.sh \ && call $SCRIPT_PATH\name_all_log.sh \ && cd FCW \ && cd ObjectDetectionTest \ && exit; bash";
set CYGWINPATH="C:\cygwin64\bin"
set PATH=%CYGWINPATH%;%PATH%

ENDLOCAL

但是当我运行脚本时,$COMMIT 什么都没有!那么,我做错了什么?

【问题讨论】:

输入输出是什么? 我知道你在哪里设置%COMMIT%,但是你在哪里设置$COMMIT? (它们是完全不同的变量!) @SomethingDark - 不,它们不是不同的变量 - 至少不是你的意思。当 bash shell 从 Windows shell 继承其环境时,%FOO% 被继承为 $FOO,因为不同的 shell 使用了不同的约定 @MohamedAmeen - 我不明白为什么这行不通,而且在我刚刚运行的模拟测试中,同样的模式运行良好。您记得在运行脚本时将提交值作为第一个参数传递,对吧(因为您是从 %1 读取的)? @Mark Adelsberger 感谢您让我正确,即使您对我的回答投了反对票。我尊重这一点。我确实测试了我的答案,但不专心地对其进行了编辑以更好地作为答案。然后把它弄坏了。 【参考方案1】:

通过一个 bat 脚本,我成功地完成了这项工作:

set COMMIT=%1
echo COMMIT: %COMMIT%
bash -l -c "COMMIT=%COMMIT% bash -l -c 'echo \$COMMIT'"

意思:

让 bat 脚本在 bash 命令中解析 %COMMIT%。 在第一个bash -c 中设置COMMIT 后,在bash 中调用一个bash 转义$

【讨论】:

以上是关于在 bash 终端中使用 Batch 参数的主要内容,如果未能解决你的问题,请参考以下文章

(转)理解YOLOv2训练过程中输出参数含义

如何在 Visual Studio 2019 中使用 git bash 终端配置文件?

在 tensorboard 中可视化 batch_norm 参数

终端打印

在 Spring Batch 应用程序中自定义步骤的参数

如何通过 System.Diagnostics.Process() 将参数传递给已经打开的终端