Есть несколько способов выполнения разных команд в одном bash
и cmd
том же скрипте.
cmd
будет игнорировать строки, начинающиеся с :;
, как упоминалось в других ответах. Он также проигнорирует следующую строку, если текущая строка заканчивается командой rem ^
, так как ^
символ выйдет за пределы разрыва строки, а следующая строка будет рассматриваться как комментарий rem
.
Что касается bash
игнорирования cmd
строк, существует несколько способов. Я перечислил несколько способов сделать это, не нарушая cmd
команды:
Несуществующая #
команда (не рекомендуется)
Если при запуске скрипта нет #
доступных команд cmd
, мы можем сделать это:
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Символ #
в начале cmd
строки заставляет bash
рассматривать эту строку как комментарий.
Символ #
в конце bash
строки используется для комментирования \r
персонажа, как указал Брайан Томпсетт в своем ответе . Без этого bash
будет выдана ошибка, если в файле есть \r\n
окончания строк, требуемые cmd
.
Поступая так # 2>nul
, мы пытаемся cmd
игнорировать ошибку какой-то несуществующей #
команды, продолжая выполнять следующую команду.
Не используйте это решение, если есть #
команда, доступная на сайте, PATH
или если у вас нет контроля над командами, доступными для cmd
.
Использование echo
для игнорирования #
символа наcmd
Мы можем использовать echo
его перенаправленный вывод для вставки cmd
команд в bash
закомментированную область:
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Поскольку этот #
символ не имеет особого значения cmd
, он рассматривается как часть текста echo
. Все, что нам нужно было сделать, это перенаправить вывод echo
команды и вставить после нее другие команды.
Пустой #.bat
файл
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
echo >/dev/null # 1>nul 2> #.bat
Строка создает пустой #.bat
файл при положенной cmd
(или заменяет существующие #.bat
, если таковые имеются), и ничего не делает при положенной bash
.
Этот файл будет использоваться cmd
линиями (ы) , что следует , даже если есть какая -либо другая #
команда на PATH
.
Команда del #.bat
в cmd
конкретном коде удаляет созданный файл. Вам нужно сделать это только в последней cmd
строке.
Не используйте это решение, если #.bat
файл может находиться в вашем текущем рабочем каталоге, так как этот файл будет удален.
Рекомендуется: использовать здесь-документ для игнорирования cmd
команд наbash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
Помещая ^
символ в конце cmd
строки, мы экранируем разрыв строки, и используя :
в качестве разделителя здесь-документа, содержимое строки разделителя не будет иметь никакого эффекта cmd
. Таким образом, он cmd
будет выполнять свою строку только после того, как :
строка закончится, имея такое же поведение, как bash
.
Если вы хотите иметь несколько строк на обеих платформах и выполнять их только в конце блока, вы можете сделать это:
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
Это решение должно работать, пока нет cmd
строки с точным here-document delimiter
. Вы можете изменить here-document delimiter
на любой другой текст.
Во всех представленных решениях команды будут выполняться только после последней строки , что делает их поведение согласованным, если они делают одно и то же на обеих платформах.
Эти решения должны быть сохранены в файлах с \r\n
разрывами строк, иначе они не будут работать cmd
.