নিরাপদ দিকে থাকতে, আমি চাই স্ক্রিপ্টের সিন্টেক্স ত্রুটির সম্মুখীন হলে কোনও স্ক্রিপ্ট কার্যকর করা বাতিল করা উচিত।
আমার অবাক করার বিষয়, আমি এটি অর্জন করতে পারি না। ( 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বিবৃতিতে থাকার কারণে যথেষ্ট নয় । অন্য কোথাও স্ক্রিপ্ট বাতিল করা উচিত।