Ответ 1
Может быть, так?
dos2unix < script.sh|bash -s
EDIT: Как указано в комментариях, это лучший вариант, поскольку он позволяет сценарию читать из stdin, запуская dos2unix, а не bash в подоболочке:
bash <(dos2unix < script.sh)
Я хочу выполнить сценарии bash, которые используют окончания строк Windows/CRLF.
Я знаю пакет tofrodos и как fromdos
файлы fromdos
, но, если возможно, я хотел бы запускать их без каких-либо изменений.
Есть ли переменная среды, которая заставит bash обрабатывать CRLF?
Может быть, так?
dos2unix < script.sh|bash -s
EDIT: Как указано в комментариях, это лучший вариант, поскольку он позволяет сценарию читать из stdin, запуская dos2unix, а не bash в подоболочке:
bash <(dos2unix < script.sh)
Вот вам прозрачное обходное решение:
cat > $'/bin/bash\r' << "EOF"
#!/bin/bash
script=$1
shift
exec bash <(tr -d '\r' < "$script") "[email protected]"
EOF
Это избавляет от проблемы раз и навсегда, позволяя вам выполнять все сценарии Windows CRLF системы, как если бы они использовали UNIX eol (с ./yourscript
), вместо того, чтобы указывать его для каждого конкретного вызова. (будьте осторожны: bash yourscript
или source yourscript
будет по-прежнему терпеть неудачу).
Он работает, потому что файлы стиля DOS, с точки зрения UNIX, указывают интерпретатор как "/bin/bash ^ M". Мы переопределяем этот файл, чтобы удалить каретки из сценария и запустить фактический bash для результата.
Вы можете сделать то же самое для разных интерпретаторов, таких как /bin/sh
если хотите.