Сценарий оболочки с пробелами в пути выполняется по-разному в зависимости от каталога - PullRequest
1 голос
/ 19 сентября 2010

Я сделал скрипт для открытия Spotify с вином:

#!/bin/bash
DIR="/home/jorgsk/.wine/drive_c/Program Files/Spotify/"
cd "$DIR"
wine spotify.exe 2>/dev/null

Я передаю «$ DIR» на компакт-диск с кавычками из-за пробелов в «Программных файлах»;если у меня нет кавычек, "/home/jorgsk/.wine/drive_c/Programs" будет рассматриваться как аргумент для cd, что, очевидно, приведет к сообщению об ошибке.

Spotify запускается нормально, если язапустите указанный выше скрипт из его локального каталога (/ home / jorgsk / bin) с помощью ./spotify.Однако, поскольку я хочу запускать его откуда угодно, я добавил / home / jorgsk / bin в переменную $ PATH в .bashrc.Когда я пишу «spotify», например, из моего домашнего каталога, я получаю сообщение об ошибке

bash: /home/jorgsk/.wine/drive_c/Program: No such file or directory

, которое является тем же сообщением об ошибке, которое я получаю, если не включаю $ DIR в кавычки при запуске сценария tje с./spotify из каталога скрипта.

Что здесь происходит?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2010

Я не знаю ответа, но думаю, что смогу дать вам процедуру, которая определит проблему.

Добавьте set -x, чтобы скрипт повторял строки, которые он выполняет.

 #!/bin/bash
 set -x
 DIR="/home/jorgsk/.wine/drive_c/Program Files/Spotify/"
 cd "$DIR"
 wine spotify.exe 2>/dev/null

Кроме того, назовите скрипт как-то иначе, чем spotify. Хотя это не выглядит сразу, как будто это имеет значение, кто знает, какое сложное поведение происходит, когда вино получает контроль?

0 голосов
/ 19 сентября 2010

Я не уверен, почему это происходит - похоже, это должно работать для меня.

Вы говорите, что это на вашем пути, но это та версия, которая действительно называется?

Попробуйте запустить: which spotify из вашего домашнего каталога. Команда which сообщает вам путь к скрипту, который выполняется.

...