Windows の C:\Program Files (x86)... パスが原因で Bash スクリプトが機能しません。

Windows の C:\Program Files (x86)... パスが原因で Bash スクリプトが機能しません。

私はbashエミュレート端末を使用してWindows 7でbashスクリプトを開発しています。正確に言えば、MobaXterm 9.1でbash端末を使用しています。その理由はWindows 7ラップトップがありますが、私のスクリプトは最終的にJenkins Linuxサーバーで実行されるためです。

パスにスペースや(または)が含まれていると、スクリプトは正常に実行されません。

私のスクリプトは次のとおりです

#!/bin/bash
eclexe0="C:\Program Files (x86)\HPCCSystems\6.0.4\clienttools\bin\ecl.exe"
eclexe1="/drives/c/Program Files (x86)/HPCCSystems/6.0.4/clienttools/bin/ecl.exe"
clear

#1
echo "Testing if ecl.exe is available..."
if [ -f "$eclexe0" ]; then
  echo "FOUND." >&2
else
  echo "NOT FOUND." >&2
  exit 1
fi

echo "Executing ecl.exe"

echo 1
eval "$eclexe0"

echo 2

私が実行すると、出力は次のようになります。

スクリーンショット

ご覧のとおり、スクリプトはパスに満足していません。C:\プログラムファイル(x86)。ファイルを別のパス(C:¥oscar¥eclfolder)に移動すると機能します。私は答えを試しましたここしかし、うまくいきません。それはおそらくWindows 7を使っているからです。

このスクリプトをどのように機能させることができますか?

答え1

eval実行可能ファイルのパス名で実行されているため、スクリプトは機能しません。

すべてのシェルスクリプトで変数を使用して、実行するコマンドを指定できます。

引用符を引用しない場合、$variable変数の内容もスペースに基づいて別々の単語に分割されます。

変数参照を引用しました。ただし、 を実行するとeval変数拡張の結果が解析されます。第二時間。必要ありません。

次の画像は有益かもしれません。

$ ls
file.txt    file2.txt
$ somevar=ls
$ $somevar
file.txt    file2.txt
$ ls -l
total 0
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file.txt
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file2.txt
$ somevar='ls -l'
$ $somevar
total 0
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file.txt
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file2.txt
$ "$somevar"
bash: ls -l: command not found
$ 

ご覧のとおり"ls -l"、引用符を実行しようとすると、シェルは次のコマンドを探します。精密名前 - スペースを含みます。

私の場合、これは私が望むものではありません。

しかし、あなたの例でははいあなたは何が欲しいですか?

を使用する必要はありませeval "$eclexe0""$eclexe0"


大きな写真

無料のアドバイス:Linuxシステムでスクリプトを実行したい場合は、Linuxシステムでテストしてください。 MobaXtermはLinuxボックスではありません。

VagrantとVirtualBox(両方とも無料)をインストールしてテストできる仮想マシンを作成します。


追加資料:

答え2

この記事では、次のように引用符 ("\"string"\") をエスケープする必要があるかもしれません。https://stackoverflow.com/questions/5253782/bash-problem-with-eval-variables-and-quotes

関連情報