OS X bash: dirname - PullRequest
       27

OS X bash: dirname

9 голосов
/ 21 августа 2009

Я хочу создать простой bash-скрипт для запуска Java-программы на OS X. Имена файлов, пути к файлам и непосредственно рабочая папка содержат пробелы. Когда я делаю это:

#!/bin/sh
cd `dirname $0`

Я получаю

usage: dirname path

Я также пытался ставить цитаты во всевозможных местах. Самый сложный пример -

cd "`dirname \"$0\"`"

Ничего не сработало. Я либо получаю сообщения об ошибках, либо это зашифрованное сообщение: "путь использования: dirname".

Какие еще методы могут работать?


Редактировать: похоже, это не проблема ни для кого, кроме меня, так что это, должно быть, просто мой ящик. Я собираюсь принять мой собственный пост ниже, потому что это единственное решение, которое работало для этой конкретной проблемы. Однако я определенно поддерживаю решения, которые, похоже, работают для всех остальных, и действительно ценю помощь каждого.

Ответы [ 5 ]

12 голосов
/ 21 августа 2009

А как же:

cd "$(dirname "$0")"

Это работает для меня здесь.

5 голосов
/ 21 августа 2009
#!/bin/sh
cd "$(dirname "$0")"
3 голосов
/ 21 августа 2009

Что, наконец, сработало для меня, так это изменить:

#!/bin/sh
cd `dirname $0`

К этому:

#! /bin/zsh
cd "${0:h}"

Это также поддерживает имена файлов и пути к файлам, содержащие пробелы. Вот где я нашел это: http://rentzsch.com/unix/locationAwareCommandFiles

2 голосов
/ 21 августа 2009

Выход из внутренних двойных кавычек не требуется:

cd "`dirname "$0"`"

Но это не доходит до корня проблемы, которая заключается в том, что значение $ 0 кажется пустым или, возможно, чем-то странным. Попробуйте изменить запуск скрипта следующим образом:

bash -x scriptname

Это выведет каждую строку с интерполированными переменными перед ее запуском. Это очень полезно для отладки. Также весьма полезны:

-u: abort on attempt to use undefined variable
-e: abort on first error
0 голосов
/ 15 марта 2010

Эй, не уверен насчет этого ... Но возможно ли, что ваш

#!/bin/sh 

Указывает на то, что не Bash? Обычно я использую:

#!/usr/bin/bash

Довольно плохо знаком со сценарием, так что не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...