নিরাপদ দিকে থাকতে, আমি চাই স্ক্রিপ্টের সিন্টেক্স ত্রুটির সম্মুখীন হলে কোনও স্ক্রিপ্ট কার্যকর করা বাতিল করা উচিত।
আমার অবাক করার বিষয়, আমি এটি অর্জন করতে পারি না। ( set -e
যথেষ্ট নয়)) উদাহরণ:
#!/bin/bash
# Do exit on any error:
set -e
readonly a=(1 2)
# A syntax error is here:
if (( "${a[#]}" == 2 )); then
echo ok
else
echo not ok
fi
echo status $?
echo 'Bad: has not aborted execution on syntax error!'
ফলাফল (bash-3.2.39 বা bash-3.2.51):
$ ./sh-on-syntax-err
./sh-on-syntax-err: line 10: #: syntax error: operand expected (error token is "#")
status 1
Bad: has not aborted execution on syntax error!
$
ঠিক আছে, $?
সিনট্যাক্স ত্রুটিগুলি ধরার জন্য আমরা প্রতিটি বিবৃতি পরে পরীক্ষা করতে পারি না ।
(আমি একটি বুদ্ধিমান প্রোগ্রামিং ভাষা থেকে এই ধরনের নিরাপদ আচরণের প্রত্যাশা করেছি ... সম্ভবত এটি অবশ্যই বাগ হিসাবে রিপোর্ট করা উচিত / বিকাশকারীদের বাশ করতে ইচ্ছুক)
আরও পরীক্ষা নিরীক্ষা
if
কোন পার্থক্য করে না।
সরানো হচ্ছে if
:
#!/bin/bash
set -e # exit on any error
readonly a=(1 2)
# A syntax error is here:
(( "${a[#]}" == 2 ))
echo status $?
echo 'Bad: has not aborted execution on syntax error!'
ফলাফল:
$ ./sh-on-syntax-err
./sh-on-syntax-err: line 6: #: syntax error: operand expected (error token is "#")
status 1
Bad: has not aborted execution on syntax error!
$
সম্ভবত, এটি http://mywiki.wooledge.org/BashFAQ/105 থেকে অনুশীলন 2 সম্পর্কিত এবং এর সাথে কিছু করার আছে (( ))
। তবে আমি সিনট্যাক্স ত্রুটির পূর্বে সম্পাদন চালিয়ে যাওয়া অযৌক্তিক মনে করি।
না, (( ))
কোন পার্থক্য!
পাটিগণিত পরীক্ষা না করেও এটি খারাপ আচরণ করে! কেবল একটি সাধারণ, প্রাথমিক স্ক্রিপ্ট:
#!/bin/bash
set -e # exit on any error
readonly a=(1 2)
# A syntax error is here:
echo "${a[#]}"
echo status $?
echo 'Bad: has not aborted execution on syntax error!'
ফলাফল:
$ ./sh-on-syntax-err
./sh-on-syntax-err: line 6: #: syntax error: operand expected (error token is "#")
status 1
Bad: has not aborted execution on syntax error!
$
set -e
এটি কেন কাজ হয়নি তা একটি ব্যাখ্যা হতে পারে । তবে আমার প্রশ্নটি এখনও বোধগম্য। কোনও সিনট্যাক্স ত্রুটি বাতিল করা কি সম্ভব?
set -e
আপনার সিনট্যাক্স ত্রুটিটি একটিif
বিবৃতিতে থাকার কারণে যথেষ্ট নয় । অন্য কোথাও স্ক্রিপ্ট বাতিল করা উচিত।