OS X bash: dirname

北慕城南 提交于 2019-12-04 18:54:05

问题


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.


回答1:


What about:

cd "$(dirname "$0")"

That works for me here.




回答2:


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



回答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




回答4:


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



回答5:


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

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