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

标签 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 终端的标准输出。我怎么能这样做?

最佳答案

打开命令提示符(并运行上面的脚本应该会在屏幕上打印出任何这些程序写入标准输出的所有内容。如果没有发生,那么有些事情你没有告诉我们。

也就是说:混用 BASH 和 BAT 会给您带来麻烦。他们对很多事情有不同的看法,在两者之间切换会让你感到困惑,尤其是当你不是两者的专家时。

由于您使用 BASH 调用 Windows 可执行文件,我建议您从头开始使用 BASH 并使用 PowerShell。 PowerShell 更像 BASH,但它理解 Windows(即带反斜杠的路径)。就像在 BASH 中一样,PowerShell 将允许您将 iv4_console 的输出重定向到一个文件或通过管道将其返回到脚本以进行进一步处理。

所有这些事情也可以用 BAT 完成,但是许多“功能”会让你在这个过程中发疯。

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

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

关于linux - 如果从批处理脚本调用 bash 终端,如何打印它的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42979945/

相关文章:

mysql - bash 使用 while read 在单个变量中连接字符串

linux - 加入由空行分隔的组

linux - 使用 ssh 在 linux 上安装 java

c++ - Sr 编程语言安装在 Ubuntu 14.04 编译器错误

python - 容器的 Docker 超时?

bash - 使用 Bash 替换目录/子目录名称中的点或字符

linux - 无法从嵌套子 shell 传递变量

linux - 强制 sh shell 使用外部函数而不是内置函数

c++ - 如何消除仅在启用优化时出现的错误

python - 通过 Shell 调用 MATLAB 时出现 Python 脚本问题