batからwslでシェルファイルを実行するアレコレ

batでwslを呼び出す

まず、batファイルからwslを呼び出してシェルファイルを実行するのは以下で出来ます。

wsl ./some_file.sh

bat呼び出し時のカレントディレクトリに依存したくない場合は最初にcd %~dp0 を追加して、以下のようにすればどこからbatファイルを呼び出してもワークします

cd %~dp0
wsl ./some_file.sh

改行コードによるエラー

dir=$(cd $(dirname $0); pwd)
docker run --rm \
    -v "${dir}/../api/public/openapi:/local" \
    -v "${dir}/:/usr/openapi/" \
    openapitools/openapi-generator-cli generate \
    -i /usr/openapi/main/openapi.yml \
    -g php-laravel -o /local/src \
    -t /usr/openapi/template/php-laravel

こんな感じのコードをwsl上で実行したところ、以下のエラーが

docker: invalid reference format.
See 'docker run --help'.
./gen_openapi.sh: line 6: -v: command not found
./gen_openapi.sh: line 7: -v: command not found
./gen_openapi.sh: line 8: openapitools/openapi-generator-cli: No such file or directory
./gen_openapi.sh: line 9: -i: command not found
./gen_openapi.sh: line 10: -g: command not found
./gen_openapi.sh: line 11: -t: command not found
./gen_openapi.sh: line 12: $'\r': command not found

これはwindows上のファイルをwslから実行した際に改行コードの違い(widnowsはCRLFでlinuxはLF)により、シェルファイルの改行が上手く行かずに起きるエラーのようです。

windows上のshファイルをLFに変更したらうまく動きます

コメント

タイトルとURLをコピーしました