2009-08-20 8 views
7

मैं ओएस एक्स पर जावा प्रोग्राम लॉन्च करने के लिए एक सरल बैश स्क्रिप्ट बनाना चाहता हूं। फ़ाइल के नाम, फ़ाइल पथ, और तत्काल काम करने वाले फ़ोल्डर में सभी रिक्त स्थान हैं। जब मैं यह कर:ओएस एक्स बैश: डायरनाम

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

मैं

usage: dirname path 

मिल मैं भी अलग-अलग स्थानों के सभी प्रकार में उद्धरण डालने की कोशिश की है। सबसे विस्तृत उदाहरण

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

कुछ भी काम नहीं किया है। मुझे या तो त्रुटि संदेश या उस गूढ़ "उपयोग: dirname पथ" संदेश मिलता है।

अन्य विधियां जो काम कर सकती हैं?


संपादित करें: इस किसी के लिए भी एक मुद्दा है, लेकिन मेरे लिए तो यह सिर्फ अपनी बॉक्स होना चाहिए नहीं लगता है। मैं नीचे अपनी पोस्ट स्वीकार करने जा रहा हूं क्योंकि यह एकमात्र समाधान है जो इस विशिष्ट समस्या के लिए काम करता है। हालांकि मैं निश्चित रूप से ऐसे समाधानों को उखाड़ फेंक रहा हूं जो हर किसी के लिए काम कर रहे हैं और वास्तव में हर किसी की मदद की सराहना करते हैं।

+0

'$ 0' उपज' क्या करता है? dirname $ 0 के मूल्य के बारे में कुछ विशिष्ट के साथ एक समस्या हो सकती है।क्या आपने स्क्रिप्ट के साथ एक अलग निर्देशिका में इसे चलाने का प्रयास किया है? – fbrereto

+0

आपका दूसरा उदाहरण मेरे लिए छह स्तरों की निर्देशिका के साथ काम करता है जहां हर दूसरे पूर्वजों के नाम पर कम से कम एक स्थान होता है। – Chuck

+0

कभी भी dirname के manpage को देखने का प्रयास करें? –

उत्तर

3

क्या अंत में मेरे लिए काम किया यह बदल रहा है:

#!/bin/sh 
cd `dirname $0` 
इस के लिए

:

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

इस फ़ाइल नाम और फ़ाइल पथ रिक्त स्थान युक्त भी समर्थन करता है। यहाँ जहां मुझे मिल गया है: http://rentzsch.com/unix/locationAwareCommandFiles

+0

बस उत्सुक - मेरे और नेड के समाधान में क्या असफल रहा? यदि अभिलेखागार के लिए उचित है तो मैं अपना उत्तर अपडेट करना चाहता हूं। –

+1

ओह मैं देखता हूँ। जेड खोल ठंडा। –

+0

@ सेन: मैं अभी भी "उपयोग: डायरनाम पथ" प्राप्त कर रहा हूं। मुझे लगता है कि यह मेरी मशीन के साथ कुछ करने के लिए है। लेकिन यह जेड खोल समाधान मेरे लिए काम किया। अजीब। – Dinah

12

के बारे में क्या:

cd "$(dirname "$0")" 

कि यहाँ मेरे लिए काम करता है।

2

भीतरी डबल कोट्स पलायन अनावश्यक है:

cd "`dirname "$0"`" 

लेकिन उस समस्या के मूल है, जो कि किसी भी तरह $ 0 का मूल्य शायद खाली होने के लिए, या प्रकट होता है करने के लिए नहीं मिलता है कुछ अजीब है। अपनी स्क्रिप्ट इस तरह से चल रहा है बदलने का प्रयास करें:

bash -x scriptname 

यह प्रत्येक पंक्ति, अंतर्वेशित चर के साथ, चलाने से पहले गूंज होगा। यह डिबगिंग के लिए बहुत उपयोगी है। इसके अलावा काफी सहायक होते हैं:

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

अरे इस बारे में निश्चित नहीं ... लेकिन यह संभव है कि कुछ करने के लिए अपने

#!/bin/sh 

अंक कि पार्टी की योजना बनाई है ना? मैं आमतौर पर उपयोग करता हूं:

#!/usr/bin/bash 

पूरी स्क्रिप्टिंग चीज़ के लिए बिल्कुल नया है, इसलिए सुनिश्चित नहीं है।