मान लीजिए कि मैंने अपने फ़ंक्शन में 2 पैरामीटर पास किए हैं। मैं किसी संदेश को stderr पर रीडायरेक्ट कैसे कर सकता हूं?

#!/bin/bash
if [ $# = 0 ]; then
    dir="."
elif [ $# = 1 ]; then
    dir=$1
elif [ $# -ge 2 ]; then
    echo "Too many operands." 2>> err.txt //???
    exit 1
fi
-2
John Tran 18 अप्रैल 2019, 06:03

1 उत्तर

सबसे बढ़िया उत्तर

आउटपुट देने वाले स्टेटमेंट में बस >&2 जोड़ें:

echo "Too many operands." >&2

और यदि आप चाहते हैं कि इसे err.txt नाम की फ़ाइल में भी जोड़ा जाए:

echo "Too many operands." | tee -a 'err.txt' >&2

एफडब्ल्यूआईडब्ल्यू मैं नेस्टेड ifs (और कुछ चीजों को साफ करने) के बजाय केस स्टेटमेंट का उपयोग करके आपका कोड लिखूंगा:

#!/bin/env bash
case $# in
    0 ) dir='.' ;;
    1 ) dir="$1" ;;
    * ) printf 'Too many operands: %d\n' "$#" | tee -a 'err.txt' >&2
        exit 1 ;;
esac
3
Ed Morton 18 अप्रैल 2019, 05:24