Question

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.

Was it helpful?

Solution 3

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

OTHER TIPS

What about:

cd "$(dirname "$0")"

That works for me here.

#!/bin/sh
cd "$(dirname "$0")"

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top