Shell script with whitespace in path executes differently depending on directory

孤街浪徒 提交于 2019-12-13 17:31:11

问题


I have made a script to open Spotify with wine:

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

I'm passing "$DIR" to cd with quotes because of the whitespace in "Program Files"; if I don't have the quotes "/home/jorgsk/.wine/drive_c/Programs" will be considered as the argument to cd, which obviously will result in an error message.

Spotify starts fine if I launch the above script from its local directory (/home/jorgsk/bin) with ./spotify. However, since I wish to launch it from wherever, I have /home/jorgsk/bin added to the $PATH variable in .bashrc. When I write "spotify" from for example my home directory, I get the error message

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

which is the same error message I get if I don't include $DIR in quotes when launching tje script with ./spotify from the script's directory.

What is happening here?


回答1:


I don't know the answer but I think I can give you a procedure that will identify the issue.

Add set -x to have the script echo the lines it is running.

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

Also, name the script something other than spotify. Although it doesn't immediately look like it would matter, who knows what complex behavior is happening once wine gets control?




回答2:


I'm not sure why this is happening - looks like it should work to me.

You say this is in your path but is that the version that is actually being called?

Try running: which spotify from your home directory. The which command tells you the path of the script that runs.



来源:https://stackoverflow.com/questions/3746458/shell-script-with-whitespace-in-path-executes-differently-depending-on-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!