bash サブシステム (WSL) にサインオンするときの構文エラー

bash サブシステム (WSL) にサインオンするときの構文エラー

bash Windows Subsystem for Linux にサインオンしようとすると、次のエラーが表示されます:

-bash: /home/User1/.profile: line 28: syntax error near unexpected token `('

このエラーが発生する前は、関数を使用してパスにディレクトリを永続的に配置しようとしていましたexport PATH:$PATH

私の /.profile ファイル

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi
export PATH=/home/user1/.local/bin:/home/janeen/bin:/home/janeen/miniconda3/bin:/home/User1/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/c/ProgramData/DockerDesktop/version-bin:/c/Program Files/Docker/Docker/resources/bin:/c/Program Files (x86)/Common Files/Oracle/Java/javapath_target_34052312:/c/Windows/System32:/c/Windows:/c/Windows/System32/wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Windows/System32/OpenSSH:/c/Strawberry/c/bin:/c/Strawberry/perl/site/bin:/c/Strawberry/perl/bin:/c/Users/User1/AppData/Local/Programs/Python/Python36:/c/Users/Janeen/AppData/Local/Programs/Python/Python36/Scripts:/c/Users/User1/AppData/Local/Programs/Python/Python37-32/Scripts:/c/Users/Janeen/AppData/Local/Programs/Python/Python37-32:/c/Users/User1/AppData/Local/Microsoft/WindowsApps:/e/Program Files (x86)/TBtools/bin:/snap/bin:/software/samtools

答え1

まず、空白や特殊文字を含むディレクトリパスを引用符で囲むか、これらの文字をバックスラッシュでエスケープする必要があります。参照

2 番目に、PATH を変更する標準的な方法は次のとおりです。

export PATH=/some/new/path:$PATH

したがって、 の既存の値の前にいくつかの新しいパスを追加しますPATH。そうしないと、デフォルトのパスにあるいくつかのコマンドをスムーズに実行できなくなります。

3 番目に、WSL 内では、デフォルトでは、Windows ドライブなどが 、 などにマウントされますC:。次に例を示します。D:/mnt/mnt/c/mnt/d

export PATH='/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath_':$PATH

4 番目に、使用可能なファイル は存在すべきではなく/.profile、ユーザーのホーム ディレクトリ~/.profile( $HOME/.profile) に配置されている必要があります。また、.profileファイルは不完全なようですが、デフォルトのファイルは次のようになります。ワールドワイド.profile質問内に投稿されたプロファイル ファイルでは、.bashrcファイルのソースが指定されていません。

答え2

Linux インスタンスがセットアップされると、ホスト マシンの PATH 変数が Linux マシンの .bashrc ファイルに複製されます (WSL 内から動作するようにパスが変換されます)。

ソース: https://lifesaver.codes/answer/problems-with-windows-path-variable-getting-imported-1890

PATH 変数にスペースが含まれているとこのエラーが発生しますが、PATH の値全体を引用符で囲むと、おそらくエラーは修正されます。問題のあるパスが不要な場合は削除することもできます。

より永続的な解決策、つまり「ゲスト マシンの作成ごとに 1 回」ではなく「ホスト マシンごとに 1 回修正」が必要な場合は、次の方法を試してください。

https://github.com/microsoft/WSL/issues/1640#issuecomment-276408942

関連情報