Сценарий Bash не работает из-за пути C: \ Program Files (x86)… в Windows

Я разрабатываю сценарий bash в Windows 7, используя терминал, эмулирующий bash, именно я использую терминал bash в MobaXterm 9.1. Причина в том, что у меня ноутбук с Windows 7, но мой сценарий в конечном итоге будет работать на Jenkins Linux Server.

Пробелы и / или (в пути препятствуют успешному выполнению моего сценария.

Мой сценарий:

#!/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

Когда я запускаю его, вывод будет

Screenshot

Как вы можете видеть, сценарий не доволен путем C: \ Program Files (x86) . Если я переместу файлы на другой путь (C: \ oscar \ eclfolder), это сработает. Я попробовал ответы здесь , но они, вероятно, не работают потому что у меня Windows 7 ...

Как мне заставить этот скрипт работать?

-1
13.04.2017, 15:36
2 ответа

Ваш сценарий не соответствует ' t работает, потому что вы запускаете 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» .


The Bigger Picture

Бесплатный совет: если вы планируете запускать свой сценарий на компьютере с Linux, протестируйте его на компьютере с Linux. MobaXterm - это не Linux.

Установите Vagrant и VirtualBox (которые бесплатны) и создайте виртуальную машину, на которой вы сможете проводить тесты.


Дополнительная литература:

1
28.01.2020, 05:13

Вам, вероятно, нужно избегать таких кавычек ("\" строка "\") в соответствии с этим сообщением: https://stackoverflow.com/questions/5253782/bash-problem-with-eval-variables -and-quotes

-1
28.01.2020, 05:13

Теги

Похожие вопросы