WSLを使用してcmd.exeでコマンドを実行する

WSLを使用してcmd.exeでコマンドを実行する

私はここで同じ問題に直面しています。cmd.exe(WSL)からbashへのコマンド転送は機能しません。

しかし、私にとっては、その解決策も効果がありませんでした。

WSLをインストールし、cmd.exeを介して "bet"というコマンドを実行してみました。

  1. cmd.exeを開く
  2. タイプbash -c -i "bet"

エラーが発生します。

Command 'bet' not found, did you mean:

  command 'bget' from deb ax25-tools (0.0.10-rc4-3build1)
  command 'bst' from deb buildstream (1.4.1-1)
  command 'beet' from deb beets (1.4.9-4)
  command 'btt' from deb blktrace (1.2.0-5)
  command 'bat' from deb bacula-console-qt (9.4.2-2ubuntu5)
  command 'ben' from deb ben (0.9.0ubuntu2)
  command 'fet' from deb fet (5.42.2-2build1)
  command 'eet' from deb libeet-bin (1.23.3-8)
  command 'net' from deb samba-common-bin (2:4.13.17~dfsg-0ubuntu1.20.04.1)

Try: sudo apt install <deb name>

cmd.exeを開き、bashと入力し、Linuxコマンドラインに「bet」と入力してこれを実行しようとすると正常に動作します。

私もこれを試してみましたが、wsl -e "bet"それも私がやりたいことを達成できません。 (bet命令は私が最後に追加した追加パラメータを受け取りましたが、命令は実行されません。Linuxシェルで直接betを実行すると、命令は実行されます。)

注:BetはFSLに付属の脳抽出ツールです(https://fsl.fmrib.ox.ac.uk/fsl/fslwiki)

ベストアンサー1

私はWindowsとWindowsについて何も知らないので、このcmd.exe答えはUnix環境を想定しています。ほとんどのユーザーの観点から見ると、WSLはUnix環境です。

これが使用法に関する質問である場合、cmd.exe質問は以下でより適切な視聴者を見つけることができます。スーパーユーザーのウェブサイト

bet問題は、実行可能ファイルのパスが実行されている非対話型シェルの検索パスにないようです。

いくつかの解決策があります。

  1. 実行可能ファイルの正しいパス名を使用してください。

    bash -c '/usr/local/fsl/bin/bet'
    
  2. 以下を呼び出す前に、スクリプト内の変数の値を変更してくださいPATHbash -cbet

    bash -c 'PATH=$PATH:/usr/local/fsl/bin; bet'
    
  3. PATHコマンドを起動したら、環境変数に適切なディレクトリパスを追加しますbash -c。これは、次のいずれかの方法で実行できます。

    PATH=$PATH:/usr/local/fsl/bin bash -c bet
    
    env PATH="$PATH:/usr/local/fsl/bin" bash -c bet
    
  4. PATH現在のシェルの環境を変更して、環境変数に適切なディレクトリパスを追加します。これは、シェルの起動ファイル(通常はシェル~/.bash_profileの場合bash)に次のように追加することによって実行できます。

    PATH=$PATH:/usr/local/fsl/bin
    

    これは、次回シェルセッションにログインするときに適用されます。その後、使用

    bash -c bet
    
  5. 質問にコマンドを-i実行するbash -cときにオプションを含めることもできます。これにより、シェルがインタラクティブになり、~/.bashrcファイルが解析されます。だからもう一つの選択肢は

    PATH=$PATH:/usr/local/fsl/bin
    

    ただし、この~/.bashrcファイルの目的は、起動するたびに実行したくないコマンドの実行を含めることができる対話型タスク用のシェルを設定することですbet。代わりに、上記の変数割り当てをまったく新しいファイルに追加してから、次からコピーすることもできますbash

    bash -i --rcfile envfile -c bet
    

    ...envfile新しいファイルがある場所です。

  6. ファイルに前のポイントで述べたディストリビューションがある場合は、bash次のいずれかを実行して開始できます。

    BASH_ENV=envfile bash -c bet
    
    env BASH_ENV="envfile" bash -c bet
    

    bashこれにより、インタラクティブシェルとして実行する必要がなくなります(インタラクティブモード~/.bashrcでシェルを実行すると、ジョブ制御を有効にするなど、デフォルトで解析するだけでなく、シェルにも影響があります)。

おすすめ記事