ধরা যাক আমার মূল অংশ আছে:
$NAME="a string"
if [ -f $HOME/install.sh ]
. $HOME/install.sh $NAME
fi
এবং install.sh এ:
echo $1
এটি প্রতিধ্বনিত হওয়ার কথা "a string"
, তবে এটি কিছুই প্রতিধ্বনিত করে না। কেন?
ধরা যাক আমার মূল অংশ আছে:
$NAME="a string"
if [ -f $HOME/install.sh ]
. $HOME/install.sh $NAME
fi
এবং install.sh এ:
echo $1
এটি প্রতিধ্বনিত হওয়ার কথা "a string"
, তবে এটি কিছুই প্রতিধ্বনিত করে না। কেন?
উত্তর:
মাইকেল মরোজেক বেশিরভাগ ইস্যুগুলি কভার করে এবং আপনি বাশ ব্যবহার করার পরে তার সমাধানগুলি কার্যকর হবে।
আপনার পক্ষে আগ্রহী হতে পারে যে যুক্তিযুক্ত একটি স্ক্রিপ্ট উত্সকরণের ক্ষমতা বাশিজম। ইন sh
বা dash
আপনার main.sh
ইচ্ছা না কিছু echo কারণ সোর্সড স্ক্রিপ্ট আর্গুমেন্ট উপেক্ষা করা হয় এবং $1
আর্গুমেন্ট প্রাপ্ত করতে পড়ুন হবেmain.sh.
আপনি যখন স্ক্রিপ্টটি উত্স করেছেন sh
, তখন মনে হয় আপনি সসিস্কৃত স্ক্রিপ্টটির পাঠ্যটি যে ফাইল থেকে সসার করা হয়েছিল সেটিতে এটি অনুলিপি করে আটকে দিয়েছেন। নিম্নলিখিতগুলি বিবেচনা করুন (দ্রষ্টব্য, আমি মাইকেলকে প্রস্তাবিত সংশোধন করেছি):
$ bash ./test.sh
A String
$ sh ./test.sh
$ sh ./test.sh "HELLO WORLD"
HELLO WORLD
আমি তিনটি ত্রুটি দেখতে পাচ্ছি:
আপনার অ্যাসাইনমেন্ট লাইনটি ভুল:
$NAME="a string"
আপনি যখন কোনও ভেরিয়েবলকে অর্পণ করেন আপনি এতে অন্তর্ভুক্ত করবেন না $
; এটা করা উচিত:
NAME="a string"
আপনি অনুপস্থিত then
; শর্তসাপেক্ষ রেখাটি হওয়া উচিত:
if [ -f $HOME/install.sh ]; then
$NAME
স্পেস থাকলেও আপনি উদ্ধৃতি দিচ্ছেন না । উত্স রেখাটি হওয়া উচিত:
. $HOME/install.sh "$NAME"
[ -f $HOME/install.sh ] && . $HOME/install.sh $NAME
; আমি যখন ত্রুটিগুলি খুঁজছি তখন আমার সম্ভবত এমন কাজ করা উচিত নয়
স্ক্রিপ্ট উত্সাহ দেওয়ার আগে কেবল আপনার প্যারামিটার সেট করুন!
#!/bin/bash
NAME=${*:-"a string"}
if [[ -f install.sh ]];
then
set -- $NAME ;
. install.sh ;
fi
exit;
#!/bin/bash
echo " i am sourced by [ ${0##*/} ]";
echo " with [ $@ ] as parametr(s) ";
exit;
u@h$ ./main.sh some args
i am sourced by [ main.sh ]
with [ some args ] as parametr(s)
u@h$
--
যেমন কমান্ড যুক্তি দেখিয়েছিলেন তার পরে তাদের স্ট্রিং করুন :set -- -v foo -l bar -j "${bin}"