Это, как правило, невозможно для настоящего сценария.
Автономный исполняемый скрипт будет иметь строку shebang, которая идентифицирует используемый интерпретатор:
#!/bin/sh
Проблема в том, что, независимо от интерпретатора, сама строка шебанга будет содержать символ возврата каретки перед концом, что означает, что интерпретатор не будет найден (за исключением маловероятного имени исполняемого файла буквально $'sh\r'
-, что я считаю незаконным в Windows ).
Другой тип исполняемого сценария — это простой текстовый файл с установленным битом выполнения, который требует, чтобы POSIX интерпретировал его как сценарий на командном языке оболочки POSIX(при вызове из самой совместимой оболочки ). ]. Однако этот язык оболочки, как вы обнаружили, обрабатывает возврат каретки как байты данных, поэтому у вас есть проблема, которую вы определили.
У вас есть несколько вариантов. Один из них заключается в том, чтобы отказаться от реального исполняемого сценария напрямую и просто сначала вызвать интерпретатор для какого-либо другого языка. Вы определили Perl и Python, и на самом деле большинство языков сценариев довольны любым современным форматом окончания строки -. Вызов скрипта как perl cleanup.pl
не будет проблемой.
Однако многие административные задачи гораздо проще выполнять на обычном языке оболочки, и есть еще одна хитрость, :заканчивайте каждую строку комментарием.
echo hello #
rm file.ext #
mv /path/other.fl /path/bin #
Символ #
вводит комментарий в конец строки во всех стандартных оболочках (в не -интерактивных контекстах ). Комментарий будет включать в себя байт возврата каретки, который является прекрасным элементом комментария, а затем сразу после этого заканчивается завершающим байтом перевода строки.
Важно, чтобы пробел перед решеткой :a#
внутри слова не не начинал комментарий, а был частью слова .
Вы можете запустить этот скрипт напрямую из оболочки:
bash cleanup.sh
dash cleanup.sh
sh cleanup.sh
Но если вы собираетесь запустить его, введя команду из существующего сеанса оболочки, упомянутые ранее сценарии POSIX также будут работать :просто сделайте файл исполняемым, а затем
./cleanup.sh
запустит его, используя то, что ваша оболочка считает правильным для сценария POSIX .
Так как это звучит как один -, вероятно, не стоит прилагать усилия для того, чтобы сделать его исполняемым, поэтому просто sh cleanup.sh
кажется мне достаточным.
Мое честное предложение для этой ситуации, вероятно, Powershell (или пакетное нажатие ), но я понимаю, что это не то, что вам нужно. WSL — еще один вариант :, он автоматически обрабатывает возврат каретки в строке shebang, а затем вы можете использовать комментарии для остальных.