$ में अजीब व्यवहार (dirname `readlink -f $ 0`)


11

जब मैं एक सामान्य उपयोगकर्ता के रूप में निम्नलिखित चलाता हूं, तो सब कुछ ठीक है:

$(dirname `readlink -f $0`)

लेकिन मैंने रूट करने के बाद, निम्न त्रुटि हुई:

readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

कोई विचार? मैंने स्थानीय फेडोरा 16 और अमेज़ॅन ईसी 2, दोनों चलने वाले बैश शेल पर कोशिश की।

चित्रण के लिए संपादित करें।

माफी माँगता हूँ कि मैंने इस मुद्दे को और स्पष्ट नहीं किया। यहाँ परिदृश्य है:

सामान्य उपयोगकर्ता खाते का उपयोग करना:

$ pwd 
/home/myuser 
$ export MY_DIR=$(dirname `readlink -f $0`) 
$ echo MY_DIR 
/home/myuser

जड़ का उपयोग:

# pwd
/root
# export ROOT_DIR=$(dirname `readlink -f $0`)
readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

# export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
# echo $ROOT_DIR
/root

जवाबों:


16

यह एक उपयोगकर्ता लॉगिन शेल की तरह ही त्रुटि होनी चाहिए, क्योंकि एक लॉगिन शेल में 0शेल पैरामीटर, वर्तमान प्रक्रिया के नाम तक विस्तार करता है, देता है -bash, लॉगिन शेल का संकेत देता है । अब आप देखें कि -bत्रुटि कहाँ से आई है।

इसके बजाय कोशिश करें

echo "$( dirname "$(readlink -f -- "$0")" )"

क्या करता है --( "शून्य से शून्य से" या "पानी का छींटा पानी का छींटा") से संकेत मिलता है? नेवरमाइंड - मुझे यहाँ उत्तर मिला: https://unix.stackexchange.com/q/11376
osullic

3

यदि आप वास्तव में शेल स्क्रिप्ट का निर्देशिका नाम चाहते हैं, जो चलाया जा रहा है:

script_dir="$(dirname -- "$(readlink -f -- "$0")")"

हां, यह थोडा गुदगुदाता है, लेकिन यह सुरक्षित है।

यदि आप वर्तमान शेल चाहते हैं, तो आप @ MichaelMrozek के उपयोग के सुझाव को आजमा सकते हैं $SHELL

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.