如果从批处理脚本调用bash终端的输出,如何打印?

时间:2017-03-23 15:07:56

标签: linux bash shell batch-file

我编写了一个打开bash终端的批处理脚本并执行以下操作:

@echo off
SETLOCAL

set BASHPATH="C:\Program Files (x86)\Git\bin\"
set START_DIR=%CD%

set release=%1
echo Release outside cyg: %release%
set PATH=%BASHPATH%;%PATH%

%BASHPATH%\bash -l -c "echo Release inside cyg: $release \ && echo Directory: $START_DIR \ && cd $START_DIR \ && cd .. \ && cd .. \ && cd iv_system4 \ && cd ports \ && cd visualC12 \ && cd Debug \ && ./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-toxml.lua C:\sequences\FCW_APTINA\SECTION_1\$release\VASP_DUN722_20160307_Krk_Krk_113048_092_1.dvl &>../../../../FCW/ObjectDetectionTest/VASP_DUN722_20160307_Krk_Krk_113048_092_1_$release.xml \ && echo First XML generated \ && exit; bash";
%BASHPATH%\bash -l -c "echo Release inside cyg: $release \ && echo Directory: $START_DIR \ && cd $START_DIR \ && cd .. \ && cd .. \ && cd iv_system4 \ && cd ports \ && cd visualC12 \ && cd Debug \ && ./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-toxml.lua C:\sequences\FCW_APTINA\SECTION_1\$release\VASP_DUN722_20160307_Krk_Krk_140604_050_1.dvl &>../../../../FCW/ObjectDetectionTest/VASP_DUN722_20160307_Krk_Krk_140604_050_1_$release.xml \ && echo Second XML generated \ && exit; bash";
%BASHPATH%\bash -l -c "echo Release inside cyg: $release \ && echo Directory: $START_DIR \ && cd $START_DIR \ && cd .. \ && cd .. \ && cd iv_system4 \ && cd ports \ && cd visualC12 \ && cd Debug \ && ./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-toxml.lua C:\sequences\FCW_APTINA\SECTION_1\$release\VASP_DUN722_20160308_Krk_Bra_171516_012_1.dvl &>../../../../FCW/ObjectDetectionTest/VASP_DUN722_20160308_Krk_Bra_171516_012_1_$release.xml \ && echo Third XML generated \ && exit; bash";
%BASHPATH%\bash -l -c "echo Release inside cyg: $release \ && echo Directory: $START_DIR \ && cd $START_DIR \ && cd .. \ && cd .. \ && cd iv_system4 \ && cd ports \ && cd visualC12 \ && cd Debug \ && ./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-toxml.lua C:\sequences\FCW_APTINA\SECTION_1\$release\VASP_DUN722_20160309_Krk_Bra_124926_117_1.dvl &>../../../../FCW/ObjectDetectionTest/VASP_DUN722_20160309_Krk_Bra_124926_117_1_$release.xml \ && echo Fourth XML generated \ && exit; bash";
%BASHPATH%\bash -l -c "echo Release inside cyg: $release \ && echo Directory: $START_DIR \ && cd $START_DIR \ && cd .. \ && cd .. \ && cd iv_system4 \ && cd ports \ && cd visualC12 \ && cd Debug \ && ./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-toxml.lua C:\sequences\FCW_APTINA\SECTION_1\$release\VASP_DUN722_20160317_KRK_KRK_105146_011_1.dvl &>../../../../FCW/ObjectDetectionTest/VASP_DUN722_20160317_KRK_KRK_105146_011_1_$release.xml \ && echo Fifth XML generated \ && exit; bash";

set CYGWINPATH="C:\cygwin64\bin"
set PATH=%CYGWINPATH%;%PATH%

ENDLOCAL

出于调试目的,我需要打印bash终端的stdout。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

打开一个命令提示符(并运行上面的脚本应该在屏幕上打印任何这些程序写入stdout的内容。如果没有发生,那么有些东西你没告诉它我们。

那说:混合BASH和BAT会让你遇到麻烦。他们对很多事情有不同的看法,两者之间的转换会让你感到困惑,特别是当你不是两者的专家时。

由于您使用BASH来调用Windows可执行文件,因此建议您使用BASH并使用PowerShell。 PowerShell更像BASH,但它理解Windows(即带有反斜杠的路径)。就像在BASH中一样,PowerShell允许您将iv4_console的输出重定向到文件或将其传回给脚本以进行进一步处理。

所有这些事情也可以用英美烟草公司完成,但许多特色和#34;会让你在这个过程中疯狂。

除此之外,您的脚本中存在一些问题。几行末尾的; bash"将启动一个新的bash shell。该shell将停止脚本并等待您键入命令。

避免使用cd x && cd y,而是使用cd x/y