简体   繁体   中英

Shell script with whitespace in path executes differently depending on directory

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?

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.

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?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM