Неверный MIT -MAGIC -COOKIE -1 key% WIDGET _CONTROL :Невозможно подключиться к дисплею X Windows :localhost :11.0

Это, как правило, невозможно для настоящего сценария.

  1. Автономный исполняемый скрипт будет иметь строку shebang, которая идентифицирует используемый интерпретатор:

    #!/bin/sh
    

    Проблема в том, что, независимо от интерпретатора, сама строка шебанга будет содержать символ возврата каретки перед концом, что означает, что интерпретатор не будет найден (за исключением маловероятного имени исполняемого файла буквально $'sh\r'-, что я считаю незаконным в Windows ).

  2. Другой тип исполняемого сценария — это простой текстовый файл с установленным битом выполнения, который требует, чтобы 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, а затем вы можете использовать комментарии для остальных.

0
22.02.2021, 21:24
0 ответов

Теги

Похожие вопросы