Pregunta

Quiero crear un script bash simple de poner en marcha un programa Java en OS X. Los nombres de los archivos, la ruta del archivo y la carpeta de trabajo inmediata todos contienen espacios. Cuando hago esto:

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

consigo

usage: dirname path

También he intentado poner comillas en todo tipo de lugares diferentes. El más elaborado siendo ejemplo

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

Nada ha funcionado. I cualquiera consigue mensajes de error o que críptica "uso: nombredir ruta" mensaje

.

¿Cuáles son otros métodos que podrían funcionar?


Editar esto no parece ser un problema para nadie más que yo por lo que debe ser mi cuadro. Voy a aceptar mi propio post de abajo, porque es la única solución que trabajó para este problema específico. Sin embargo estoy definitivamente Upvoting las soluciones que parecen estar funcionando para todos los demás y realmente aprecian la ayuda de todos.

¿Fue útil?

Solución 3

Lo que finalmente funcionó para mí está cambiando esto:

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

A esto:

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

Esto también es compatible con nombres de archivo y rutas de archivos que contienen espacios. Aquí es donde la encontré: http://rentzsch.com/unix/locationAwareCommandFiles

Otros consejos

¿Qué hay de:

cd "$(dirname "$0")"

Esto funciona para mí aquí.

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

escapar de las comillas dobles interior es innecesaria:

cd "`dirname "$0"`"

Pero eso no quiere llegar a la raíz del problema, que es que de alguna manera el valor de 0 $ parece que está vacío, o tal vez algo extraño. Prueba a cambiar de ejecutar el script de esta manera:

bash -x scriptname

Esto hará eco de cada línea, con variables interpolados, antes de ejecutarlo. Es muy útil para la depuración. También bastante útiles son:

-u: abort on attempt to use undefined variable
-e: abort on first error

Hey no está seguro acerca de esto ... Pero, ¿es posible que su

#!/bin/sh 

Puntos a algo que no se bash? Lo que suelo usar es:

#!/usr/bin/bash

bastante nuevo en todo el asunto de secuencias de comandos que no estoy seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top