শ ফাইল থেকে রান করার সময় শেল স্ক্রিপ্ট একটি পাওয়া যায় না ত্রুটি নিক্ষেপ করে। তবে ম্যানুয়ালি প্রবেশ করলে কমান্ডগুলি কাজ করে


19

আমি আমার ওয়েবসাইটের জন্য সাইটম্যাপ তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করার চেষ্টা করছি। যখন আমি এটিকে চালিত করি যখন আমি এর sh thsitemap.shমতো ত্রুটি পাই এবং খালি সাইটম্যাপ.এক্সএমএল ফাইল তৈরি করি:

thsitemap.sh: 22: thsitemap.sh: [[: not found
thsitemap.sh: 42: thsitemap.sh: [[: not found
thsitemap.sh: 50: thsitemap.sh: Syntax error: "(" unexpected

কিন্তু একই ব্যবহারকারীর হিসাবে rootযখন আমি ম্যানুয়ালি টার্মিনালে এই লাইনগুলি অনুলিপি করে আটকান, এটি কোনও ত্রুটি ছাড়াই কাজ করে এবং সাইটম্যাপ.এক্সএমএল ফাইলটিতে সমস্ত url থাকে। সমস্যা কি? আমি এটা কিভাবে ঠিক করবো?

#!/bin/bash
##############################################
# modified version of original http://media-glass.es/ghost-sitemaps/
# for ghost.centminmod.com
# http://ghost.centminmod.com/ghost-sitemap-generator/
##############################################
url="techhamlet.com"
webroot='/home/leafh8kfns/techhamlet.com'
path="${webroot}/sitemap.xml"
user='leafh8kfns'       # web server user
group='leafh8kfns'      # web server group

debug='n' # disable debug mode with debug='n'
##############################################
date=`date +'%FT%k:%M:%S+00:00'`
freq="daily"
prio="0.5"
reject='.rss, .gif, .png, .jpg, .css, .js, .txt, .ico, .eot, .woff, .ttf, .svg, .txt'
##############################################
# create sitemap.xml file if it doesn't exist and give it same permissions
# as nginx server user/group
if [[ ! -f "$path" ]]; then
    touch $path
    chown ${user}:${group} $path
fi

# check for robots.txt defined Sitemap directive
# if doesn't exist add one
# https://support.google.com/webmasters/answer/183669
if [ -f "${webroot}/robots.txt" ]; then
SITEMAPCHECK=$(grep 'Sitemap:' ${webroot}/robots.txt)
    if [ -z "$SITEMAPCHECK" ]; then
    echo "Sitemap: http://${url}/sitemap.xml" >> ${webroot}/robots.txt
    fi
fi
##############################################
echo "" > $path

# grab list of site urls
list=`wget -r --delete-after $url --reject=${reject} 2>&1 |grep "\-\-"  |grep http | grep -v 'normalize\.css' | awk '{ print $3 }'`

if [[ "$debug" = [yY] ]]; then
    echo "------------------------------------------------------"
    echo "Following list of urls will be submitted to Google"
    echo $list
    echo "------------------------------------------------------"
fi

# put list into an array
array=($list)

echo "------------------------------------------------------"
echo ${#array[@]} "pages detected for $url" 
echo "------------------------------------------------------"

# formatted properly according to
# https://support.google.com/webmasters/answer/35738
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<urlset xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">" > $path

echo ' 
   ' >> $path;
   for ((i=0;i<${#array[*]};i++)); do
echo "<url>
    <loc>${array[$i]:0}</loc>
    <lastmod>$date</lastmod>
    <changefreq>$freq</changefreq>
    <priority>$prio</priority>
</url>" >> $path
   done
echo "" >> $path
echo "</urlset>" >> $path

# notify Google
# URL encode urls as per https://support.google.com/webmasters/answer/183669
if [[ "$debug" = [nN] ]]; then
    wget  -q --delete-after http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2F${url}%2Fsitemap.xml

    rm -rf ${url}
else
    echo "wget  -q --delete-after http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2F${url}%2Fsitemap.xml"

    echo "rm -rf ${url}"
fi
echo "------------------------------------------------------"

exit 0

আপনি কীভাবে স্ক্রিপ্টটি চালাবেন?
cuonglm

@ জ্নোক শ স্ক্রিপ্ট.শ
টিপ্পস

8
চেষ্টা করুন :, পিক্সিক মোডে মেক সুইচ bash script.shকল করছে । আমি মনে করি এই ধরণের প্রশ্নের উত্তর দেওয়া হয়েছে। আপনি এটি উল্লেখ করতে পারেন: unix.stackexchange.com/questions/44836/…shbash
cuonglm

উত্তর:


35

স্ক্রিপ্টটি এইভাবে চালান:

bash script.sh

বা শুধু:

./script.sh

কখন bashনাম ব্যবহার করে চালানো হয় sh, এটি [[পরীক্ষার অপারেটরের মতো এর বেশিরভাগ এক্সটেনশানকে অক্ষম করে ।

যেহেতু আপনার কাছে #!/bin/bashশেবাং লাইন রয়েছে, আপনার কমান্ড লাইনে স্পষ্টভাবে শেল ইন্টারপ্রেটার নির্দিষ্ট করার দরকার নেই। কমান্ড হিসাবে স্ক্রিপ্টটি চালানো শেলটি সন্ধান করতে সেই লাইনটি ব্যবহার করবে।


-1

আপনার উভয় ... if [[ debug = "...“ ]] ; then...কমান্ডগুলি ভুল যা তাদের পড়া উচিত ...

if [ "debug" = "Y" -o "debug" = "y" ]

6
না, কোডটি বৈধ বাশ, কেবল বৈধ sh নয়।
গ্লেন জ্যাকম্যান

ত্রুটি 1, 22-এ কিছু সমস্যা [[।
রবার্বডোগ

@rhubarbdog যদি করেছে # / বিন / SH তারপর আপনার উত্তর কাজ করতে পারে, যদি ফাইল # টি হয়েছে / bin / bash যদি [[ডিবাগ = "..."]] করা উচিত নয় একটি সমস্যা!
রাজেশ Hatwar
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.