bash - एक बैश खोल स्क्रिप्ट में सभी तर्कों का प्रचार करें




scripting (5)

ठीक काम करता है, सिवाय इसके कि आपके पास रिक्त स्थान हैं या अक्षर से बच निकले हैं। मुझे इस मामले में तर्कों को पकड़ने का तरीका नहीं मिला है और स्क्रिप्ट के अंदर एक एसएसएच भेजना है।

यह उपयोगी हो सकता है लेकिन बहुत बदसूरत है

_command_opts=$( echo "[email protected]" | awk -F\- 'BEGIN { OFS=" -" } { for (i=2;i<=NF;i++) { gsub(/^[a-z] /,"&@",$i) ; gsub(/ $/,"",$i );gsub (/$/,"@",$i) }; print $0 }' | tr '@' \' )

मैं एक बहुत ही सरल लिपि लिख रहा हूं जो एक और स्क्रिप्ट कहता है, और मुझे अपनी वर्तमान स्क्रिप्ट से पैरामीटर को उस स्क्रिप्ट में प्रसारित करने की आवश्यकता है जिसे मैं निष्पादित कर रहा हूं।

उदाहरण के लिए, मेरा स्क्रिप्ट नाम foo.sh और बार bar.sh कॉल bar.sh

foo.sh:

bar $1 $2 $3 $4

मैं प्रत्येक पैरामीटर को स्पष्ट रूप से निर्दिष्ट किए बिना ऐसा कैसे कर सकता हूं?


मुझे एहसास हुआ कि इसका उत्तर दिया गया है लेकिन यहां "$ @" $ @ "$ *" और $ * के बीच तुलना है

परीक्षण लिपि की सामग्री:

# cat ./test.sh
#!/usr/bin/env bash
echo "================================="

echo "Quoted DOLLAR-AT"
for ARG in "[email protected]"; do
    echo $ARG
done

echo "================================="

echo "NOT Quoted DOLLAR-AT"
for ARG in [email protected]; do
    echo $ARG
done

echo "================================="

echo "Quoted DOLLAR-STAR"
for ARG in "$*"; do
    echo $ARG
done

echo "================================="

echo "NOT Quoted DOLLAR-STAR"
for ARG in $*; do
    echo $ARG
done

echo "================================="

अब, विभिन्न तर्कों के साथ परीक्षण स्क्रिप्ट चलाएं:

# ./test.sh  "arg with space one" "arg2" arg3
=================================
Quoted DOLLAR-AT
arg with space one
arg2
arg3
=================================
NOT Quoted DOLLAR-AT
arg
with
space
one
arg2
arg3
=================================
Quoted DOLLAR-STAR
arg with space one arg2 arg3
=================================
NOT Quoted DOLLAR-STAR
arg
with
space
one
arg2
arg3
=================================

यदि आप वास्तव में अपने पैरामीटर को पारित करना चाहते हैं तो सादे [email protected] बजाय "[email protected]" उपयोग करें।

का निरीक्षण करें:

$ cat foo.sh
#!/bin/bash
baz.sh [email protected]

$ cat bar.sh
#!/bin/bash
baz.sh "[email protected]"

$ cat baz.sh
#!/bin/bash
echo Received: $1
echo Received: $2
echo Received: $3
echo Received: $4

$ ./foo.sh first second
Received: first
Received: second
Received:
Received:

$ ./foo.sh "one quoted arg"
Received: one
Received: quoted
Received: arg
Received:

$ ./bar.sh first second
Received: first
Received: second
Received:
Received:

$ ./bar.sh "one quoted arg"
Received: one quoted arg
Received:
Received:
Received:


#!/usr/bin/env bash
while [ "$1" != "" ]; do
  echo "Received: ${1}" && shift;
done;

बस यह सोचने का प्रयास करते समय यह थोड़ा और उपयोगी हो सकता है कि आपकी स्क्रिप्ट में तर्क कैसे आते हैं







scripting