I want to create a simple bash script to launch a Java program on OS X. The names of the file, the file path, and the immediate working folder all contain spaces. When I do this:
#!/bin/sh
cd `dirname $0`
I get
usage: dirname path
I have also tried putting quotes in all kinds of different places. The most elaborate example being
cd "`dirname \"$0\"`"
Nothing has worked. I either get error messages or that cryptic "usage: dirname path" message.
What are other methods that might work?
Edit: this doesn't seem to be an issue for anyone but me so it must just be my box. I'm going to accept my own post below because it's the only solution which worked for this specific problem. However I'm definitely upvoting the solutions which seem to be working for everyone else and really appreciate everyone's help.
What about:
cd "$(dirname "$0")"
That works for me here.
#!/bin/sh
cd "$(dirname "$0")"
What finally worked for me is changing this:
#!/bin/sh
cd `dirname $0`
To this:
#! /bin/zsh
cd "${0:h}"
This also supports file names and file paths containing spaces. Here's where I found it: http://rentzsch.com/unix/locationAwareCommandFiles
Escaping the inner double quotes is unnecessary:
cd "`dirname "$0"`"
But that doesn't get to the root of the problem, which is that somehow the value of $0 appears to be empty, or perhaps something strange. Try changing running your script this way:
bash -x scriptname
This will echo each line, with variables interpolated, before running it. It is very useful for debugging. Also quite helpful are:
-u: abort on attempt to use undefined variable
-e: abort on first error
Hey not sure about this... But is it possible that your
#!/bin/sh
Points to something that is not bash? What I usually use is:
#!/usr/bin/bash
Pretty new to the whole scripting thing so not sure.
来源:https://stackoverflow.com/questions/1308823/os-x-bash-dirname