ইউনিট টেস্টিং বাশ স্ক্রিপ্টগুলি


112

আমাদের একটি সিস্টেম রয়েছে যা জাভা কোড ছাড়াও কিছু ব্যাশ স্ক্রিপ্ট চালু আছে। যেহেতু আমরা সম্ভাব্যভাবে ভেঙে যেতে পারে এমন সমস্ত কিছুর পরীক্ষা করার চেষ্টা করছি এবং এই ব্যাশ স্ক্রিপ্টগুলি ভেঙে যেতে পারে, আমরা সেগুলি পরীক্ষা করতে চাই।

সমস্যাটি হ'ল বাশ স্ক্রিপ্টগুলি পরীক্ষা করা শক্ত।

বাশ স্ক্রিপ্টগুলি পরীক্ষা করার জন্য কি কোনও উপায় বা সর্বোত্তম অনুশীলন রয়েছে? বা বাশ স্ক্রিপ্টগুলি ব্যবহার করা ছেড়ে দেওয়া উচিত এবং পরীক্ষার যোগ্য বিকল্প সমাধানগুলি অনুসন্ধান করা উচিত?




বিদ্যমান সরঞ্জামের সংক্ষিপ্ত বিবরণ: medium.com/wemake-services/...
sobolevn

উত্তর:


48

বোর্নে ভিত্তিক শেল স্ক্রিপ্টগুলির জন্য একটি শুনিট 2 আসলে একটি এক্স ইউনাইট ভিত্তিক ইউনিট পরীক্ষার কাঠামো রয়েছে। আমি নিজে এটি ব্যবহার করি নি তবে এটি পরীক্ষা করে দেখার মতো হতে পারে।

অনুরূপ প্রশ্ন আগে জিজ্ঞাসা করা হয়েছে:


3
আমি দৃ (়ভাবে বলতে পারি (পাং উদ্দেশ্যযুক্ত) যে শুনিট 2 (সংস্করণ 2.1.6) তারিখে কিছুটা ভাঙা। আপনি যদি তাদের সরাসরি মূল্যবোধগুলি খাওয়ান তবে assertNull এবং assertNotNull কাজ করে না। assertEquals ভাল কাজ করে, তবে আমি মনে করি আমি আপাতত আমার নিজের রোল করতে চলেছি।
গোলকধাঁধা

@ ল্যাবাইরিন্থ, আপনি কি নিশ্চিত যে সমস্যাটি এরকমটি ছিল না: github.com/kward/shunit2/issues/53 "assertNull সঠিকভাবে কীভাবে ব্যবহার করবেন?"
ভিক্টর সার্জিয়েনকো

1
@ ভিক্টর এটি অবশ্যই সম্ভব যে আমি আমার ডাবল-কোট দিয়ে যথেষ্ট যত্নবান ছিলাম না। আমি শীঘ্রই এমন একটি ভূমিকায় ফিরে যাচ্ছি যেখানে শুনিট 2 বা কিছু ব্যাশ ইউনিট-পরীক্ষা ব্যবস্থা খুব কার্যকর হবে। আমি আবার চেষ্টা করব।
গোলকধাঁধা

5
আমি একটি ব্যবহারকারী এবং কখনও কখনও shunit2 এর সহযোগী, এবং আমি নিশ্চিত করতে পারেন প্রকল্পের জীবিত এবং ভাল 2019. হয়
অ্যালেক্স হার্ভে

31

আমি একটি আলোচনা গ্রুপ থেকে নিম্নলিখিত উত্তর পেয়েছি:

কোনও বহিরাগত ফাইল থেকে কোনও প্রক্রিয়া (ফাংশন, যার নামই হোক) আমদানি করা (অন্তর্ভুক্ত, যাই হোক না কেন) করা সম্ভব possible এটি টেস্টিং স্ক্রিপ্ট লেখার মূল চাবিকাঠি: আপনি আপনার স্ক্রিপ্টটি স্বাধীন পদ্ধতিতে বিভক্ত করেন যা আপনার চলমান স্ক্রিপ্ট এবং আপনার পরীক্ষার স্ক্রিপ্ট উভয় ক্ষেত্রেই আমদানি করা যায় এবং তারপরে আপনার চালিত স্ক্রিপ্টটি যতটা সম্ভব সহজ হয়।

এই পদ্ধতিটি স্ক্রিপ্টগুলির জন্য নির্ভরতা ইনজেকশনের মতো এবং যুক্তিযুক্ত বলে মনে হয়। বাশ স্ক্রিপ্টগুলি এড়ানো এবং আরও পরীক্ষামূলক এবং কম অস্পষ্ট ভাষা ব্যবহার করা ভাল।


4
আমি নিশ্চিত যে আমার ভোট দেওয়া উচিত বা নিচে, একদিকে যেমন ছোট অংশে বিভাজন করা ভাল, তবে দ্বিতীয়দিকে আমার একটি কাঠামো দরকার কাস্টম স্ক্রিপ্টগুলির সেট নয়
এমপিপিস

10
যদিও ব্যাশে কোনও ভুল নেই (আমি অনেকগুলি, অনেকগুলি স্ক্রিপ্ট লিখেছি), এটি আয়ত্ত করা শক্ত ভাষা। আমার থাম্বের নিয়মটি হ'ল যদি কোনও স্ক্রিপ্টের জন্য টেস্টের প্রয়োজন হয় তবে আপনার সম্ভবত সম্ভবত স্ক্রিপ্টিং ভাষার দিকে যাওয়া উচিত move
ডগ

1
তবে কখনও কখনও আপনার এমন কিছু থাকা দরকার যা ব্যবহারকারীর শেলের মধ্যে সেরে নেওয়া যায়। শেল স্ক্রিপ্ট অবলম্বন না করে আপনি কীভাবে এটি করতেন তা আমার কাছে পরিষ্কার নয়
ইতকোভিয়ান

@ ইতকোভিয়ান - উদাহরণস্বরূপ, আপনি কোনও এক্সিকিউটেবলকে রফতানি করতে এনপিএম ব্যবহার করতে পারেন, সুতরাং কোনও সোর্সিংয়ের প্রয়োজন নেই (আপনার এনপিএম প্যাকেজটি বিশ্বব্যাপী ইনস্টল করতে হবে)
এলিরান মালকা

1
আমি ব্যাশ ব্যবহার না করার বিষয়ে পরামর্শটি অনুসরণ করব। :)
ম্যাকিয়েজ ওয়াওরজিয়েকজুক

30

ট্যাপ- সম্মতিযুক্ত বাশ পরীক্ষা: বাশ অটোমেটেড টেস্টিং সিস্টেম

টেপ, টেস্ট অ্যানিথিং প্রোটোকল, পরীক্ষার জোরে পরীক্ষার মডিউলগুলির মধ্যে একটি সাধারণ পাঠ্য-ভিত্তিক ইন্টারফেস। ট্যাপ পার্লের পরীক্ষার জোয়ারের অংশ হিসাবে জীবন শুরু করেছিল তবে এখন সি, সি ++, পাইথন, পিএইচপি, পার্ল, জাভা, জাভাস্ক্রিপ্ট এবং অন্যান্যগুলিতে বাস্তবায়ন রয়েছে।


14
ট্যাপ কী তা প্রকাশ করার মতো এবং কেন এটির যত্ন নেওয়া উচিত, অন্যথায় এটি কেবল অর্থহীন অনুলিপি-পেস্ট
ওম-নাম-মনোনীত

@ ওম-নাম-নম: আমি এখন এটি ট্যাপ সাইটের সাথে সংযুক্ত করেছি।
জানুস ট্রয়লসন

7
যেহেতু অন্য কেউ অযোগ্য বলছেন না: টেপ = যেকোন প্রোটোকল পরীক্ষা করুন
জেডাব্লু।

9

নিকিতা সোবোলেভ কয়েকটি ভিন্ন বাশ পরীক্ষার ফ্রেমওয়ার্কগুলির সাথে তুলনা করে একটি দুর্দান্ত ব্লগ পোস্ট লিখেছিলেন: বাশ অ্যাপ্লিকেশনগুলির পরীক্ষা করছেন

অধৈর্য ব্যক্তির জন্য: নিকিতার সিদ্ধান্তে ব্যাটস ব্যবহার করা হয়েছিল তবে দেখা যাচ্ছে যে নিকিতা ব্যাটস-কোর প্রকল্পটি মিস করেছেন যা মূল ব্যাটস প্রকল্পটি ২০১৩ সাল থেকে সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়নি বলে আমাকে এগিয়ে যাওয়ার কাজে লাগবে বলে মনে হয় ।


7

ইপোক্সি একটি বাশ পরীক্ষার কাঠামো যা আমি মূলত অন্যান্য সফ্টওয়্যার পরীক্ষার জন্য ডিজাইন করেছি তবে আমি নিজে এবং কার্টন সহ বাশ মডিউলগুলিও পরীক্ষা করতে এটি ব্যবহার করি

প্রধান সুবিধাগুলি হ'ল তুলনামূলকভাবে কম কোডিং ওভারহেড, সীমাহীন আসক্তি নেস্টিং এবং যাচাইকরণের জন্য জোরের নমনীয় নির্বাচন।

আমি এটি বেকারলিবের সাথে তুলনা করে একটি উপস্থাপনা করেছি - এটি একটি ফ্রেমওয়ার্ক যা রেড হ্যাট-এর কিছু লোক ব্যবহার করে।


6

আপনি কেন বলছেন যে ব্যাশ স্ক্রিপ্টগুলি পরীক্ষা করা "শক্ত"?

পরীক্ষার মোড়কির মতো কী হচ্ছে:

 #!/bin/bash
 set -e
 errors=0
 results=$($script_under_test $args<<ENDTSTDATA
 # inputs
 # go
 # here
 #
 ENDTSTDATA
 )
 [ "$?" -ne 0 ] || {
     echo "Test returned error code $?" 2>&1
     let errors+=1
     }

 echo "$results" | grep -q $expected1 || {
      echo "Test Failed.  Expected $expected1"
      let errors+=1
 }
 # and so on, et cetera, ad infinitum, ad nauseum
 [ "$errors" -gt 0 ] && {
      echo "There were $errors errors found"
      exit 1
 }

4
প্রথমত, ব্যাশ স্ক্রিপ্টগুলি খুব বেশি পঠনযোগ্য নয়। দ্বিতীয়ত, প্রত্যাশাগুলি বাশ স্ক্রিপ্টের পিআইডি দিয়ে লক ফাইল তৈরি করা হয়েছে কিনা তা যাচাই করার মতো জটিল।
নিমক্যাপ

10
আরও গুরুত্বপূর্ণ, শেল স্ক্রিপ্টগুলি পরীক্ষা করা কঠিন কারণ তাদের সাধারণত প্রচুর পার্শ্ব প্রতিক্রিয়া থাকে এবং ফাইল সিস্টেম, নেটওয়ার্ক ইত্যাদি সিস্টেমের সংস্থান ব্যবহার করে,
jayhendren

4

আমি শেলস্পেক তৈরি করেছি কারণ আমি একটি সহজেই ব্যবহারযোগ্য এবং দরকারী সরঞ্জাম চেয়েছিলাম।

এটি খাঁটি POSIX শেল স্ক্রিপ্ট দ্বারা রচিত। এটি shunit2 এর চেয়েও বেশি শেল পরীক্ষা করেছে। এতে ব্যাট / ব্যাটস-কোরের চেয়ে শক্তিশালী বৈশিষ্ট্য রয়েছে।

উদাহরণস্বরূপ, নেস্টেড ব্লক, ম্যাক / স্টাব করা সহজ, স্কিপ / পেন্ডিং এ সহজ, পরামিতি পরীক্ষা, দৃ line় লাইন নম্বর, লাইন নম্বর অনুসারে এক্সিকিউট, সমান্তরাল এক্সিকিউশন, এলোমেলো এক্সিকিউশন, ট্যাপ / জুনিট ফর্ম্যাটার, কভারেজ এবং সিআই ইন্টিগ্রেশন, প্রোফাইলার এবং ইত্যাদি সমর্থন করুন ।

প্রকল্পের পৃষ্ঠায় ডেমো দেখুন।


3

আমি বেশ শেল 2 জুনিট পছন্দ করি , ব্যাশ স্ক্রিপ্ট টেস্টগুলি থেকে JUnit- জাতীয় আউটপুট উত্পন্ন করার জন্য একটি ইউটিলিটি। এটি দরকারী কারণ উত্পন্ন প্রতিবেদনটি জেনকিনস এবং বাঁশের জন্য JUnit প্লাগ-ইনগুলির মতো অবিচ্ছিন্ন ইন্টিগ্রেশন সিস্টেমগুলি দ্বারা পড়তে পারে।

Shell2junit মত ব্যাপক ব্যাশ স্ক্রিপ্টিং ফ্রেমওয়ার্ক উপলব্ধ করা হয় না যদিও shunit2 , আপনার পরীক্ষার ফলাফল সুন্দর প্রতিবেদনের আছে অনুমতি নেই।


3

বাশেস্ট চেষ্টা করুন । এটি আপনার স্ক্রিপ্টগুলি পরীক্ষা করার সহজ উপায়। উদাহরণস্বরূপ, আপনার do-some-work.shযা কিছু কনফিগার ফাইল পরিবর্তন করে। উদাহরণস্বরূপ, PASSWORD = 'XXXXX'কনফিগার করা ফাইলটিতে নতুন লাইন যুক্ত করুন/etc/my.cfg

আপনি লাইন দ্বারা bash কমান্ড লিখুন এবং তারপরে আউটপুট পরীক্ষা করুন।

ইনস্টল করুন:

pip3 install bashtest

পরীক্ষাগুলি তৈরি করা একটি সুনির্দিষ্ট লেখার বাশ কমান্ড।

ফাইল test-do-some-work.bashtest:

# run the script  
$ ./do-some-work.sh > /dev/null

# testing that the line "PASSWORD = 'XXXXX'" is in the file /etc/my.cfg   
$ grep -Fxq "PASSWORD = 'XXXXX'" /etc/my.cfg && echo "YES"
YES

পরীক্ষা চালান:

bashtest *.bashtest

আপনি এখানে এবং এখানে কিছু উদাহরণ খুঁজে পেতে পারেন


3

হতে পারে এটি ব্যবহার করা যেতে পারে, বা অবদান রাখতে পারে

https://thorsteinssonh.github.io/bash_test_tools/

টেপ প্রোটোকলে ফলাফল লেখার ইচ্ছে আছে যা আমি কল্পনা করি সিআইয়ের পক্ষে ভাল, এবং যারা শেল পরিবেশ চায় তাদের পক্ষে ভাল। আমি কল্পনা করি কিছু জিনিস শেল পরিবেশে চালিত হয় তাই কেউ কেউ তর্ক করতে পারে তাদের শেল পরিবেশে পরীক্ষা করা উচিত।


3

Assert.sh করার চেষ্টা করুন

source "./assert.sh"

local expected actual
expected="Hello"
actual="World!"
assert_eq "$expected" "$actual" "not equivalent!"
# => x Hello == World :: not equivalent!

আশা করি এটা সাহায্য করবে!


3

আমি বিশ্বাস করতে পারি না যে ওএসএইচটি নিয়ে কেউ কথা বলেনি ! এটি TAP এবং JUnit উভয়ের সাথেই সামঞ্জস্যপূর্ণ , এটি খাঁটি শাঁস (এটি অন্য কোনও ভাষা জড়িত নয়), এটিও একক কাজ করে, এবং এটি সহজ এবং সরাসরি।

পরীক্ষার মতো দেখতে (প্রকল্প পৃষ্ঠা থেকে নেওয়া স্নিপেটস):

#!/bin/bash
. osht.sh

# Optionally, indicate number of tests to safeguard against abnormal exits
PLAN 13

# Comparing stuff
IS $(whoami) != root
var="foobar"
IS "$var" =~ foo
ISNT "$var" == foo

# test(1)-based tests
OK -f /etc/passwd
NOK -w /etc/passwd

# Running stuff
# Check exit code
RUNS true
NRUNS false

# Check stdio/stdout/stderr
RUNS echo -e 'foo\nbar\nbaz'
GREP bar
OGREP bar
NEGREP . # verify empty

# diff output
DIFF <<EOF
foo
bar
baz
EOF

# TODO and SKIP
TODO RUNS false
SKIP test $(uname -s) == Darwin

একটি সহজ রান:

$ bash test.sh
1..13
ok 1 - IS $(whoami) != root
ok 2 - IS "$var" =~ foo
ok 3 - ISNT "$var" == foo
ok 4 - OK -f /etc/passwd
ok 5 - NOK -w /etc/passwd
ok 6 - RUNS true
ok 7 - NRUNS false
ok 8 - RUNS echo -e 'foo\nbar\nbaz'
ok 9 - GREP bar
ok 10 - OGREP bar
ok 11 - NEGREP . # verify empty
ok 12 - DIFF <<EOF
not ok 13 - TODO RUNS false # TODO Test Know to fail

শেষ পরীক্ষাটি "ঠিক আছে না" হিসাবে দেখায়, তবে প্রস্থান কোডটি 0 কারণ এটি একটি TODO। কেউ ভার্বোজও সেট করতে পারে:

$ OSHT_VERBOSE=1 bash test.sh # Or -v
1..13
# dcsobral \!= root
ok 1 - IS $(whoami) != root
# foobar =\~ foo
ok 2 - IS "$var" =~ foo
# \! foobar == foo
ok 3 - ISNT "$var" == foo
# test -f /etc/passwd
ok 4 - OK -f /etc/passwd
# test \! -w /etc/passwd
ok 5 - NOK -w /etc/passwd
# RUNNING: true
# STATUS: 0
# STDIO <<EOM
# EOM
ok 6 - RUNS true
# RUNNING: false
# STATUS: 1
# STDIO <<EOM
# EOM
ok 7 - NRUNS false
# RUNNING: echo -e foo\\nbar\\nbaz
# STATUS: 0
# STDIO <<EOM
# foo
# bar
# baz
# EOM
ok 8 - RUNS echo -e 'foo\nbar\nbaz'
# grep -q bar
ok 9 - GREP bar
# grep -q bar
ok 10 - OGREP bar
# \! grep -q .
ok 11 - NEGREP . # verify empty
ok 12 - DIFF <<EOF
# RUNNING: false
# STATUS: 1
# STDIO <<EOM
# EOM
not ok 13 - TODO RUNS false # TODO Test Know to fail

এটি একটি .tএক্সটেনশান ব্যবহার করতে নামকরণ করুন এবং এটিকে একটি tউপ-ডিরেক্টরিতে রেখে দিন এবং prove(1)এটি চালানোর জন্য আপনি (পার্লের অংশ) ব্যবহার করতে পারেন :

$ prove
t/test.t .. ok
All tests successful.
Files=1, Tests=13,  0 wallclock secs ( 0.03 usr  0.01 sys +  0.11 cusr  0.16 csys =  0.31 CPU)
Result: PASS

JUnit আউটপুট উত্পাদন করতে সেট OSHT_JUNITবা পাস করুন -j। JUnit এছাড়াও একত্রিত করা যেতে পারে prove(1)

আমি এই লাইব্রেরিগুলিকে তাদের ফাইলগুলি সোর্স করে এবং তারপরে IS/ OKএবং তাদের নেতিবাচক, এবং স্ক্রিপ্টগুলি RUN/ দ্বারা ব্যবহার করে পরীক্ষার ফাংশন দুটি ব্যবহার করেছি NRUN। আমার জন্য, এই কাঠামোটি সর্বনিম্ন ওভারহেডের জন্য সর্বাধিক লাভ সরবরাহ করে।


1

আমি এখানে উপস্থাপিত সমাধানগুলির অনেকগুলি চেষ্টা করেছি, তবে তাদের বেশিরভাগই দেখতে পাওয়া যায় এবং ব্যবহারের পক্ষে শক্ত, তাই আমি আমার নিজের ছোট্ট পরীক্ষার কাঠামোটি তৈরি করেছি: https://github.com/meonlol/t-bash

এটি রেপোতে কেবল একটি ফাইল যা আপনি সরাসরি চালাতে পারবেন, JUnit স্টাইলের মূল সেটগুলির প্রাথমিক সেট সহ।

আমি এটি বেশ কয়েকটি অভ্যন্তরীণ প্রকল্পে পেশাদারভাবে ব্যবহার করেছি এবং আমাদের ব্যাশ স্ক্রিপ্টগুলি সুপার স্ট্যাবিলিটি এবং রিগ্রেশন প্রতিরোধী করতে সক্ষম হয়েছি।



0

আউটথানটিকের দিকে একবার দেখুন , যে কোনও কমান্ড লাইন অ্যাপ্লিকেশন পরীক্ষা করার জন্য এটি অনেকগুলি ভাষা (পার্ল, পাইথন, রুবি, বাশ পছন্দ অনুযায়ী) এবং ক্রস প্ল্যাটফর্ম (লিনাক্স, উইন্ডোজ) কাঠামোর দ্বারা সহজ, এক্সটেনসিবল।


-2

পাইথনের এত বড় সুবিধা থাকলে বড় স্ক্রিপ্টগুলির জন্য ব্যাশ ব্যবহার করা ন্যায়সঙ্গত হওয়া আমার পক্ষে কঠিন হয়ে পড়েছে:

  • চেষ্টা করুন / বাদে ত্রুটির ক্ষেত্রে পরিবর্তনগুলি পূর্বাবস্থায় নেওয়ার ক্ষমতা সহ আরও শক্তিশালী স্ক্রিপ্টগুলি লেখার অনুমতি দেয়।
  • অস্পষ্ট সিনট্যাক্স যেমন আপনার ব্যবহার করতে হবে না 'if [ x"$foo" = x"$bar"]; then ... ' এর যা ত্রুটিযুক্ত।
  • বিকল্পগুলি ব্যবহার করে এবং যুক্তিগুলির সহজে পার্সিং getoptমডিউলটি (এবং যুক্তিগুলি পার্স করার পক্ষে আরও সহজ মডিউল রয়েছে, তবে নামটি আমার হাতছাড়া হয়)।
  • পাইথন আপনাকে প্রাথমিক স্ট্রিং এবং অ্যারের পরিবর্তে তালিকাগুলি / ডিক্টস এবং অবজেক্টের সাথে কাজ করতে দেয়।
  • যথাযথ ভাষা সরঞ্জামগুলিতে অ্যাক্সেস যেমন রেগেক্স, ডাটাবেসগুলি (নিশ্চিত যে আপনি mysqlকমান্ডের মধ্যে সমস্ত কিছু পাইশে রাখতে পারেন তবে কোডটি লেখার পক্ষে এটি সর্বোত্তম উপায় নয়)।
  • ফাইলের সঠিক ফর্ম $*বা "$*"বা "$@"বা $1বা "$1", ফাইলনামগুলির ফাঁকা স্থান কোনও সমস্যা নয়, ইত্যাদি ইত্যাদি নিয়ে চিন্তা করার দরকার নেই etc.

এখন আমি কেবলমাত্র সরলতম স্ক্রিপ্টগুলির জন্য ব্যাশ ব্যবহার করি।


3
পাইথনের সুবিধাগুলি রয়েছে তা অস্বীকার না করে তবে আপনার দ্বিতীয় পয়েন্টটি খুব ভালভাবে দেওয়া হয়নি। একই তুলনা হিসাবে করা যেতে পারে if [[ $foo = $bar ]]; then ...। পাইথন যা দেয় তার থেকে এটি এখনও ভাল নয়, তবে আপনি যা উপস্থাপন করেছিলেন তার চেয়ে এটি ভাল।
শ্রীকান্ত শরৎ

8
কিছু সিস্টেমে (যেমন এম্বেড করা হয়েছে) উদাহরণস্বরূপ পাইথন পাওয়া যায় না এবং আপনি অতিরিক্ত স্টাফ ইনস্টল করতে / করতে পারবেন না।
রুই মার্কস

2
আমি ব্যক্তিগতভাবে বাশকে ভালবাসি, তবে একমত যে এটি একটু পরীক্ষামূলক হতে পারে। আপনাকে সাধারণত অনেক বেশি প্র্যাকটিভ হতে হয় যেখানে পাইথনে আপনি ত্রুটিগুলি সামনে আসার পরে তাদের সমাধান করতে পারেন । তবে, trapব্যাশের (ত্রুটির ক্ষেত্রে সাফ / পূর্বাবস্থায় ফেরত) পাশাপাশি রেইজেক্স (যেমন [[ $1 =~ ^[1-3]{3}$ ]]) রয়েছে। আমি নিশ্চিত যে আপনি যে অস্পষ্ট সিনট্যাক্সটি ব্যবহার করেছেন তা পুরানো বাস্তবায়নের ক্ষেত্রে test, বাশ নয় reference বিদ্যমান কমান্ড-লাইন সরঞ্জামগুলির সাথে হস্তক্ষেপের জন্য বাশ দুর্দান্ত ... ... প্রায়শই পাইথন বিকল্পের তুলনায় একক পাইপ awkবা grepখুব সহজ।
ছয়

1
বিটিডাব্লু, আপনি যে পার্সার মডিউলটির কথা উল্লেখ করেছেন তা সম্ভবত optparseবা এর উত্তরসূরি argparse। আমি কখনই কাউকে getoptমডিউলটি ব্যবহার করতে দেখিনি , বা ব্যক্তিগতভাবেও ব্যবহার করেছি। getoptউপযোগ তবে মহান। শেল থেকে আর্গুমেন্ট পার্সিং করা মোটেও কোনও সমস্যা নয় আপনি একবারে একটি সুন্দর নিদর্শন পেয়ে গেছেন। আপনি যদি গিট স্টাইলের সাব-কমান্ড বা কোনও কিছু প্রয়োগ করার চেষ্টা না করেন তবে এটি খুব বেশি সমস্যা হয় না।
ছয়

পাইশন যেখানেই বাশ পৌঁছাতে পারে সেখানে চলবে না। আমি বলি যেহেতু আমরা বাশ বনাম অজগর, একই কোড লজিক পরীক্ষা করেছি এবং উভয়কেই কিছু করার জন্য অনুরোধ করেছি। বাশ এটির প্রতিটি ডিরেক্টরি প্রবেশ করিয়েছিল। অন্যদিকে পাইথন কিছু ডিরেক্টরি অনুমতি এবং ফাইল এবং খুব দ্রুত বৃদ্ধি এবং হ্রাস পাচ্ছিল এমন ডিরেক্টরিও পরিচালনা করতে পারেনি।
ভায়ান্না Feb77
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.