1

是否可以在批处理脚本中运行msys bash 命令?假设我有一个 .bat文件,其中我有我的 windows 批处理命令,并且在一行中我将切换到msys bash 来处理msys指定的命令。像这样:

[...] 
batch commands 
[...]
C:\mingw\msys\1.0\bin\sh -l
mount 'C:\mingw\local32' /local32
[...] 
bash commands 
[...]

感谢帮助!

jb_

4

3 回答 3

4

为什么不将所有 shell 命令放在一个单独的文件中,然后从批处理文件中的一行中调用该脚本?

C:\mingw\msys\1.0\bin\sh your-msys-script.sh
于 2013-09-25T11:52:53.797 回答
0

我现在找到了一个更好的方法:我使用 mintty 控制台,我认为它也可以与其他控制台一起使用。mintty 在 msys/1.0/bin 下,有一个快捷方式我用参数指向 mintty:/bin/sh -l。现在我可以从批处理文件参数发送到该快捷方式。例如:mintty.lnk script.sh

于 2013-09-30T06:24:07.913 回答
0

.SH 文件类似于 Windows 操作系统中的批处理文件,如果已激活基于 Linux 的 Windows 操作系统,则可以在 Windows 中运行。因此,要使用适用于 Linux 的 Windows 子系统在 Windows 10 中运行 .SH 文件,如果您的 Linux 子系统尚未安装,请执行以下操作:

转到设置 > 更新和安全 > 对于开发人员。检查开发人员模式单选按钮。并搜索“<em>Windows 功能”,选择“<strong>打开或关闭 Windows 功能”。滚动找到 WSL,选中该框,然后安装它。完成后,必须重新启动才能完成安装请求的更改。按立即重新启动。BASH 将在命令提示符和您的 PowerShell 中可用。

执行 bash 脚本文件

打开命令提示符并转到包含.sh文件的文件夹。键入 Bash script-filename.sh 并按回车键。它将执行脚本,并且根据文件,您应该会看到输出。 在此处输入图像描述

我的 bash 文件 (state.sh) 包含以下脚本: 在此处输入图像描述

并作为文本:

echo "Current state:"
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @ "$UPSTREAM")

if [ $LOCAL = $REMOTE ]; then
echo "Up-to-date"
elif [ $LOCAL = $BASE ]; then
echo "Need to pull"
elif [ $REMOTE = $BASE ]; then
echo "Need to push"
else
echo "Diverged"
fi

运行包含 bash 脚本文件的批处理文件

您可以在下图中看到如何从批处理文件启动 bash 文件:

@echo off
START  /wait ./state.sh
echo            . . . . . . . . . . . . . . . . . . . .
echo               'The program executed successfully!'
echo            . . . . . . . . . . . . . . . . . . . .

现在您的批处理文件已准备好执行。

希望这个答案可以帮助那些寻求解决此类问题的人。

于 2020-07-10T06:59:21.877 回答