আমি কীভাবে নিরাপদে ksh এর সংস্করণ পেতে পারি?


12

আমি কীভাবে কোনও ksh স্ক্রিপ্টের মধ্যে থেকে নিরাপদে ksh এর সংস্করণ পেতে পারি ?

আমি নিম্নলিখিত সমাধানগুলি দেখেছি :

  1. ksh --version
  2. echo ${.sh.version}
  3. echo $KSH_VERSION

এবং সঠিক পরিস্থিতিতে দেওয়া, এই প্রতিটি সঠিকভাবে কাজ করে। তবে আমি অ-নিখুঁত ক্ষেত্রে যত্নশীল care

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

যাইহোক, সমস্যাযুক্ত মেশিনে, শেলের অদক্ষতা সংস্করণটি পরীক্ষা করার ক্ষেত্রে প্রসারিত হয় ...

  • যদি আমি চেষ্টা করি তবে ksh --versionএটি কিছুই মুদ্রণ করে না এবং এর নতুন উদাহরণটি খোলে ksh!
  • যদি আমি চেষ্টা echo ${.sh.version}, kshএকটি বাক্য গঠন ত্রুটি যে সঙ্গে বাতিল করা যাবে না হিসাবে এই একইরূপে 2> /dev/null

    $ echo ${.sh.version} 2> /dev/null  
    ksh: ${.sh.version}: bad substitution
    
  • অবশ্যই echo $KSH_VERSIONঠিকঠাক কাজ করে বলে মনে হচ্ছে - এর অর্থ এটি ক্রাশ হবে না - যদিও এই মেশিনগুলিতে এটি ফাঁকা। এছাড়াও, আমি কোথাও দেখেছি যা KSH_VERSIONকেবলমাত্র দ্বারা সেট করা আছে pdksh

প্রশ্নাবলী:

  • আমি কীভাবে kshপ্রোগ্রামের ভার্সনটি নিরাপদে পরীক্ষা করতে পারি ? এখানে আমার উদ্দেশ্যগুলির জন্য, আসল সংস্করণ নম্বরটি কী, এটি কেবল পুরানো সংস্করণ কিনা তা আমি সত্যিই চিন্তা করি না ksh
  • কি $KSH_VERSIONভাল কি যথেষ্ট? মানে যদি এটি ফাঁকা হয় তবে kshঅগত্যা একটি পুরানো সংস্করণ? এটি কি অন্য ফোরামটি সঠিক ছিল যে এটি এমনকি নতুন সংস্করণগুলির জন্য সেট করা যায় না ksh?
  • এটি আদৌ পরীক্ষা করার কোনও উপায় নেই?

1
আপনি যে কোনও কারণে দুটি কোড পাথ চান এবং কম ভয়ঙ্কর কোডের সাথে একক নয়?
থরবজর্ন রাভন অ্যান্ডারসন

@ থরবজরনআরএনএন্ডারসন এটির প্রম্পটের সাথে সম্পর্কিত। আমার .kshrc ফাইলে আমার একটি ফাংশন রয়েছে যা tssh এবং zsh প্রম্পটের pwd- সংক্ষেপণ কার্যকারিতা সিমুলেট করে এবং আমি PS1এই ফাংশনটি ব্যবহার করার জন্য সেট আপ করি । যাইহোক, প্রাচীন ksh সমর্থন করে না $()যে PS1। সুতরাং এটি যদি ksh এর আধুনিক সংস্করণ PS1হয় তবে আমি তৈরি করা ফাংশনটি ব্যবহার করতে চাই; এটি যদি পুরানো সংস্করণ হয় তবে আমি ঠিক ব্যবহার করি $PWD
সিলডোরথ

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

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

উত্তর:


7

আমি মনে করি .sh.versionএটিটি এটিটি কেটিএস 93 এর প্রথম সংস্করণ থেকেই বিদ্যমান ছিল It এটি পিডিএক্সএক্স বা ম্যাক্সে উপলভ্য নয়। যেহেতু ${.sh.version}ksh93 ব্যতীত শেলের মধ্যে একটি সিনট্যাক্স ত্রুটি, তাই এর জন্য পরীক্ষাটি একটি সাব-শেলের মধ্যে মোড়ানো এবং এটির পিছনে সুরক্ষিত করুন eval

_sh_version=$(eval 'echo "${.sh.version}"' 2>/dev/null) 2>/dev/null
case $_sh_version in
  '') echo "This isn't ATT ksh93";;
  
esac

KSH_VERSION পাবলিক ডোমেন ksh ক্লোন (pdksh) দিয়ে শুরু হয়েছিল এবং ২০০sh সালে ksh93t দিয়ে তুলনামূলকভাবে প্রকৃত কর্ন শেলটিতে যুক্ত হয়েছিল।

সংস্করণ সংখ্যা পরীক্ষা করার পরিবর্তে আপনার নির্দিষ্ট বৈশিষ্ট্যের জন্য পরীক্ষা করা উচিত যা আপনাকে শোক দিচ্ছে। বেশিরভাগ বৈশিষ্ট্যগুলির জন্য একটি সাব-শেলের মধ্যে কিছু নির্মাণ চেষ্টা করে পরীক্ষা করা যেতে পারে এবং এটি কোনও ত্রুটি ঘটায় কিনা তা দেখুন।


সাব-শেল ব্যবহার করার সময় আমি কোনও পার্থক্য দেখছি না। এটি এখনও ${.sh.version}একটি সিনট্যাক্স ত্রুটি হিসাবে বিবেচনা করে যা মিলিত হতে পারে না। আমি যে বার্তাটি পাই তা হ'ল bad substitution
সিলডোরথ

@ সিল একটি সাবশেল ব্যবহারের বিন্দুটি ত্রুটি ধরা catch /dev/nullপ্রস্থান স্থিতিতে ত্রুটিগুলি পুনর্নির্দেশ করুন এবং অগ্রাহ্য করুন।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

আমি বুঝতে পারছি তুমি কি বলছ। আমি যা বলছি তা হ'ল ত্রুটিটি পুনর্নির্দেশ করে না। এটি সর্বদা কনসোলে প্রিন্ট করে। আমি সোলারিস, এআইএক্স এবং এইচপি-ইউএক্স এ চেষ্টা করেছি; এবং ksh তাদের সকলের মধ্যে এই আচরণ প্রদর্শন করে।
সিলডোরথ

@ সিলডোরথ আহ। আমি কেবল লিনাক্সে পরীক্ষা করেছি এবং এখন পরীক্ষা করার জন্য আমার কাছে এই কোনও OS নেই। কি eval '_sh_version=$(echo "${.sh.version}")' 2>/dev/nullকাজ কোনো ভালো?
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

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

6

KSH_VERSIONksh9393t সংস্করণের আগে কার্যকর করা হয়নি। এটা সেট করা হবে mksh, pdksh, lksh। সুতরাং সংস্করণটি পরীক্ষা করার জন্য ksh, আমরা এই পদক্ষেপগুলি চেষ্টা করতে পারি:

  • পরীক্ষা করা হচ্ছে KSH_VERSIONসনাক্ত করতে mksh, pdksh,lksh
  • যদি প্রথম পদক্ষেপ ব্যর্থ হয় তবে এমন একটি বৈশিষ্ট্য ব্যবহার করে দেখুন যা ( ksh93এবং ডেভিড কর্ন আমাদের দেখায় ) এর মধ্যে আলাদা ।ksh88/86

এগুলি মাথায় রেখে, আমি সাথে যাব:

case "$KSH_VERSION" in
  (*MIRBSD*|*PD*|*LEGACY*) printf '%s\n' "$KSH_VERSION" ;;
  (*) [ -z "$ERRNO" ] && printf '%s\n' "${.sh.version}" || echo ksh88/86 ;;
esac

এই চেকটি $KSH_VERSIONপ্রথমে খালি নয় কিনা ? আমার উবুন্টু মেশিনে, "ksh93" প্রিন্ট করে, এখনও KSH_VERSIONসেট করা আছে।
সিলডোরথ

যদি পূর্বে কিছু সম্পাদিত কোড (যেমন: .kshrc) কিছু র্যান্ডম মান সহ KSH_VERSION ভেরিয়েবলকে টেম্পার করে তবে এটি ব্যর্থ হবে।
jlliagre

@ জেলিয়াগ্রে: না, এটি স্ক্রিপ্ট হিসাবে চালিত হয়েছিল, এটি পড়ে না .kshrc
cuonglm

যদি ENVভেরিয়েবল সেট করা থাকে (এবং সাধারণত এটিতে সেট করা থাকে ~/.kshrc) তবে স্ক্রিপ্টটি অবশ্যই .kshrcফাইলটি পড়বে । অবশ্যই, স্ক্রিপ্টের পক্ষে বোগাস কেএসএইচ_ভার্সন সেট করা একেবারেই অদ্ভুত হবে তবে এটি তবুও সম্ভব, ঠিক যেমন প্রথম স্ক্রিনে বর্ণিত স্ক্রিপ্টের চেয়ে আলাদা ইন্টারপ্রেটারের সাথে স্পষ্টভাবে কার্যকর করা একটি সম্ভাব্য পরিস্থিতি।
jlliagre

@ জেলিয়াগ্রে: এমনকি আপনি এটি পরিবর্তন করতে পারেন, আপনি রেফারেন্স দিলে আপনি সেগফল্ট পাবেন KSH_VERSION। আর এ mksh, pdksh, lksh, KSH_VERSIONকেবলমাত্র হিসাবে চিহ্নিত আছে।
cuonglm

5

"রিয়েল" kshরিলিজের জন্য (যেমন এটিএন্ডটি ভিত্তিক), আমি এই আদেশটি ব্যবহার করি:

strings /bin/ksh | grep Version | tail -2 

আমি প্রাপ্ত বিভিন্ন আউটপুট এখানে:

মূল ksh:

@(#)Version M-11/16/88i

dtksh;

@(#)Version 12/28/93
Version not defined

আধুনিক ksh93:

@(#)$Id: Version AJM 93u+ 2012-08-01 $

জন্য pdksh/ msh kshক্লোনস এবং আধুনিক যেমন AT & T kshসংস্করণ খুব, এখানে কিছু যে কাজ:

$ mksh -c 'echo $KSH_VERSION'
@(#)MIRBSD KSH R50 2015/04/19

সম্পাদনা:

আপনি উপেক্ষা করেছেন আপনি কোনও স্ক্রিপ্টের ভিতরে থেকে এটি করার বিষয়ে জিজ্ঞাসা করছেন, পরীক্ষিত ksh বাইনারিটির পথ জেনে নয়।

ধরে নিই যে আপনি প্রকৃতপক্ষে kshব্যবহৃত সংস্করণটি চান , এবং এটি যে বৈশিষ্ট্যগুলি সমর্থন করে তা নয়, এখানে stringsকমপক্ষে লিনাক্স এবং সোলারিসে যে কমান্ডটি ব্যবহার করা উচিত তা ব্যবহার করে এটি করার একটি উপায় এখানে রয়েছে :

echo $(for i in $(find /proc/$$ ! -type d ! -name "pagemap" | 
  grep -v "/path/" | grep -v "/fd/" ) ; do
  strings $i | egrep "([V]ersion|[K]SH_VERSION).*[0-9]" | sort -u
done 2>/dev/null)

নোট করুন যে এই পদ্ধতিটি অবিশ্বাস্য হিসাবে /procমাউন্ট নাও করা যেতে পারে, এবং অবশ্যই অন্যান্য দুর্বলতা রয়েছে। এটি অন্যান্য ইউনিক্স ওএসে অনির্যুক্ত।


এটি ডেবিয়ান জেসির মধ্যে lkshএবং এর pdkshমধ্যে পার্থক্য করা হবে না ।
cuonglm

@cuonglm আমার কাছে পরীক্ষার মতো জেসি নেই। আপনি কি বোঝাতে চান lkshএবং pdkshসেগুলি থেকে বাছাই করা যায় না KSH_VERSION?
jlliagre

না, আমি stringsতাদের উপর দৌড়াতে চাইছি । KSH_VERSIONঅবশ্যই পারেন।
cuonglm

@cuonglm দুঃখিত যদি আমি অস্পষ্ট ছিলাম। নিচে আমি লিখেছি যখন «" বাস্তব "জন্য kshরিলিজ», আমি স্পষ্টভাবে মত অ যেমন AT & T ksh ক্লোনস ব্যতীত ছিল pdksh, mkshএবং lksh
jlliagre

stringsকিছু কেএসএস বাইনারি চালানো একটি খারাপ ধারণা কারণ আপনি জানেন না যে এটিই আপনার স্ক্রিপ্টটি চলছে। হয়তো আপনার স্ক্রিপ্ট দ্বারা চালানো হচ্ছে /usr/local/bin/kshবা /home/bob/bin/kshবা /bin/shবা /usr/posix/bin/shবা ...
গিলেজ 'SO- স্টপ হচ্ছে মন্দ'

2

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

সুতরাং এখানে ksh ফাংশন হিসাবে সমাধানটি দেওয়া হয়েছে:

is_modern_ksh() {
  if whence -a whence > /dev/null 2>&1 ; then
    return 0 #success -> true
  fi
  #Else the call to `whence` failed because `-a` is not supported
  return 1 #failure -> false
}

এবং এটি কীভাবে ব্যবহার করবেন তা এখানে:

if is_modern_ksh ; then
  echo "You're using a MODERN version of ksh. :)"
else
  echo "You're using an OLD version of ksh. :("
fi

আপনি ব্যবহার করবেন না কেন ${.sh.version}?
cuonglm

পছন্দ করুন গিলসের উত্তরের মন্তব্য দেখুন ।
সিলডোরথ

দুর্ভাগ্যক্রমে whenceZsh এ রয়েছে-a
গ্রেগ এ উডস

@ গ্রেগা.উডস, এই ফাংশনটি বিশেষত কেএসএসের জন্য। ফাংশন সংজ্ঞা .kshrc এ যাবে এবং zsh এর মতো অন্যান্য শেলের জন্যও এটি উপস্থিত থাকবে না। zsh এর নিজস্ব বিল্ট-ইন whenceকমান্ড রয়েছে যা কোনওভাবেই ksh বা এর সংস্করণে আবদ্ধ নয়। আমি জানি না কেন আপনি কেন zsh এর উদাহরণ থেকে কোনও ksh হ'ল একটি পুরানো সংস্করণ, এটি সম্পূর্ণ আলাদা শেল to
সিলডোরথ

আপনার অনুমানগুলির সাথে একটি সমস্যা রয়েছে: জেডএস প্রায়শই একটি লিঙ্ক সহ ইনস্টল করা হয় /bin/ksh, যেমন ডিবিয়ান লিনাক্সে। এখন আমি এটি সেখানে ব্যবহার করি না (এবং এই মুহুর্তে আমি আমার লগইন শেলটি চেক করার জন্য পরিবর্তন করতে পারি না), সুতরাং এটি পড়ছে কি না জানি .kshrcনা তবে আমি সন্দেহ করি এটি এটি করেছে।
গ্রেগ এ উডস

1

CTRL+ ALT+V

অথবা

ESC, CTRL+V

আপনি যতটা কেএসএইচ ব্যবহার করছেন সেটির সংস্করণটি ইন্টারেক্টিভভাবে নির্ধারণ করার ক্ষেত্রে সাধারণত খুব নির্ভরযোগ্য প্রমাণিত হয়েছে, তবে এগুলি স্ক্রিপ্ট করা আরও কঠিন প্রমাণিত হয়েছে।


1
এটিই একমাত্র AIX ksh 88f সংস্করণের জন্য কাজ করেছিল।
জেফ স্ক্যালার হলেন

1
আমি কী set -o vi-বাইন্ডিংগুলিকে ভাই -লাইক সেট করতে দৌড়ানোর পরে আমি <kbd> ESC </kbd>, <kbd> CTRL </kbd> + <kbd> V </kbd> কাজ করার বিকল্প পেয়েছি । তার আগে বা + ও ভি বা-ইমাস সহ, এটি কেবল আমাকে দেখায় না। পিডি কেএসএইচ ভি 5.2.14 99/07 / 13.2 ওপেনবিএস 6.1
বিজিস্ট্যাক 15

0

আমি মনে করি sh sh। Sh.version using ব্যবহারের সাথে মৌলিক সমস্যাটি হ'ল ksh88 কেবল একটি শূন্য-বহির্গমন কোড সহ বন্ধ হয়ে যায়।

সুতরাং আমার সমাধানটি একটি সাব-শেলের মধ্যে sh {। Sh.version re রেফারেন্সের কোডটি রেখেছি, তবে সাব-শেলটি শূন্য থেকে বেরিয়েছে এবং সাব-শেলটিতে কোড রয়েছে কিনা তা পরীক্ষা করে দেখুন যা সংস্করণগুলির সংস্করণগুলিতে কাজ করবে ksh যেখানে রেফারেন্সিং sh ion। sh.version work কাজ করে। এটিকে এমন কোনও ফাংশনে আবৃত করা যা অন্য ফাংশন দ্বারা কল করা হয় যা রিটার্ন কোডকে বিপরীত করে দেয়, যাতে চূড়ান্ত কলটি সত্যের জন্য যাচাই করা হয়।

function is_oldksh
{
    (test -n ${.sh.version}) 2>/dev/null
}

function oldkshtest
{

    is_oldksh || return 0 && return 1
}

oldkshtest && echo "old ksh" || echo "new ksh"

আমি এআইএক্স এবং ওরাকল এন্টারপ্রাইজ লিনাক্স 5 এবং 6 এ ksh88, ksh93 এবং pdksh দিয়ে চালিত করেছি।

পিট


1
আধুনিক এটিএন্ডটি Ksh এখনও সরবরাহ করে .sh.version(প্রকৃতপক্ষে KSH_VERSIONএটির জন্য কার্যকরভাবে একটি নাম)। এছাড়াও কয়েকটি শেল, যেমন নেটবিএসডি এস, কেবল মুখোমুখি হওয়ার পরে পড়া বন্ধ করে দেয় ${.sh.version}এবং কোনও পরিমাণ পুননির্দেশনা তাদের স্ক্রিপ্টটি চালিয়ে রাখতে পারে না।
গ্রেগ এ উডস

0

পুরানো ksh88e এবং সাধারণ Ksh ক্লোনগুলির প্রায় সম্পূর্ণ পরিসীমা সহ (যদিও প্রতিটিটির কেবলমাত্র একটি সংস্করণ) সহ আমি পরীক্ষা করেছি এমন সমস্ত শেলগুলির জন্য নীচেরগুলি যথাযথভাবে কার্যকরভাবে কাজ করছে বলে মনে হচ্ছে, যদিও আমি এখনও আসল আসল বোর্ন শেলটি পরীক্ষা করি নি ( এবং এটি করার testজন্য পুরানো সংস্করণগুলির জন্য অভিব্যক্তিটি অভিযোজিত হতে পারে ....

সংযোজন:

আমি এখন হিরলুম বোর্ন শেলের সাথে এটি সফলভাবেও পরীক্ষা করেছি, যদিও বাহ্যিক (এবং আরও আধুনিক) testপ্রোগ্রামের মাধ্যমে।

is_attksh()
{
    # ksh93
    _sh_version=$(eval 'echo "${.sh.version}"' 2>/dev/null)
    # pdksh only
    _opt_login=$(set -o | grep login)

    test -n "${_sh_version}" -o \( -z "${_opt_login}" -a -n "${_}" -a -n "${ERRNO}" -a -n "${FCEDIT}" -a -n "${PS3}" \)
}
is_attksh && echo "AT&T Ksh${_sh_version:+: }${_sh_version:- (probably ksh88 or ksh86)}" || echo "not real ksh"

is_zsh()
{
    test -n "${ZSH_VERSION}"
}
is_zsh && echo "Zsh: ${ZSH_VERSION}" || echo "not zsh"

আপনি কেন ksh নয় এমন শেলগুলির জন্য এই ফাংশনটি চালাতে চান? আপনি যদি বাশ বা zsh এ কোনও স্ক্রিপ্ট চালাচ্ছেন তবে ksh কখনই খেলতে আসে না। তদ্ব্যতীত, এটি ইতিমধ্যে অন্যের উত্তরের মাধ্যমে প্রতিষ্ঠিত হয়েছে ${.sh.version}যা সমাধানের অংশ হতে পারে না কারণ ksh- র কিছু সংস্করণ - যে সংস্করণটি মূল পোস্টটি সম্পর্কে উদ্বিগ্ন ছিল - সেই বাক্য গঠনতে মারাত্মক ত্রুটি।
সিলডোরথ

যেমনটি আমি বলেছি, আমি যে ফাংশনটি দেখছি তাতে ksh এর সংস্করণগুলি পরীক্ষা করা হয়েছে যা "মারাত্মক" ত্রুটি দেয় এবং সেই সাথে অ্যাশের সংস্করণগুলিও একই রকম হয়।
গ্রেগ এ উডস

আমি যে স্ক্রিপ্টগুলি লিখি সেগুলি পোর্টেবল এবং কোনও সক্ষম শেল দ্বারা চালিত করার উদ্দেশ্যে। এছাড়াও, আমি অন্য কোথাও বলেছি, কিছু লোক অগত্যা বুঝতে পারবে না যে তারা Zsh কে Ksh হিসাবে ব্যবহার করছে কারণ তারা 'ksh' টাইপ করলে Zsh বাইনারিটি আহ্বান করা হবে (আরজিভি [0] "ksh" হিসাবে)।
গ্রেগ এ উডস

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

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