ওয়ান লাইনার বনাম স্ক্রিপ্ট


25

আমি অনেকগুলি উত্তর এবং মন্তব্য এবং মন্তব্যগুলি এক-লাইনারের পরিবর্তে স্ক্রিপ্টগুলি লেখার (এবং কখনও কখনও এমনকি ভয়ও) প্রকাশ করতে অসম্মতি প্রকাশ করে noticed সুতরাং, আমি জানতে চাই:

  • কখন এবং কেন আমি "ওয়ান-লাইনার" না দিয়ে একা একা স্ক্রিপ্ট লিখব? ্য মচক্সফন্দক্স?

  • উভয়ের ব্যবহারের ক্ষেত্রে কী কী হবে?

  • কিছু ভাষাগুলি (যেমন আঁশ বা পারল) অন্যের তুলনায় এক-লাইনারের পক্ষে আরও উপযুক্ত (উদাহরণস্বরূপ পাইথন)? যদি তাই হয় তবে কেন?

  • এটি কি কেবল ব্যক্তিগত পছন্দের বিষয় বা বিশেষ পরিস্থিতিতে একে অপরকে লেখার ভাল (অর্থাত্ উদ্দেশ্য) কারণ রয়েছে? সে কারণগুলি কী কী?

সংজ্ঞা

  • one-liner: শেল কমান্ড-লাইনে টাইপ করা বা সরাসরি আটকানো কোনও কমান্ডের অনুক্রম । প্রায়শই জড়িত পাইপলাইনগুলি এবং / অথবা যেমন ভাষার ব্যবহার sed, awk, perl, এবং / অথবা টুলস মত grepবা cutবা sort

    এটি কমান্ড-লাইনের সরাসরি সম্পাদন যা সংজ্ঞায়িত বৈশিষ্ট্য - দৈর্ঘ্য এবং বিন্যাস অপ্রাসঙ্গিক। একটি "এক-লাইনার" সমস্ত এক লাইনেই থাকতে পারে, বা এতে একাধিক লাইন থাকতে পারে (যেমন লুপের জন্য sh, বা এম্বেডড অ্যাজক বা সিড কোড, লাইন-ফিড এবং পাঠযোগ্যতার উন্নতি করতে ইন্ডেন্টেশন সহ)।

  • script: যে কোনও বর্ণিত ভাষা (গুলি) তে কোনও ফাইলের মধ্যে সংরক্ষণের পরে কমান্ডের কোনও ক্রম exec একটি স্ক্রিপ্ট সম্পূর্ণরূপে একটি ভাষায় লেখা যেতে পারে, বা এটি অন্যান্য ভাষা ব্যবহার করে একাধিক "ওয়ান-লাইনার" এর চারপাশে শেল-স্ক্রিপ্টের মোড়ক হতে পারে।


আমার নিজস্ব উত্তর আছে (যা আমি পরে পোস্ট করব), তবে আমি চাই এটি কেবল আমার ব্যক্তিগত মতামত নয়, এই বিষয়টিতে একটি মূল প্রশ্নোত্তর হয়ে উঠুক।



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

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

3
@wjandrea যোগ করার জন্য: regexes। পার্লের তাদের জন্য একটি নির্দিষ্ট বাক্য গঠন রয়েছে যার মধ্যে অপারেশন অন্তর্ভুক্ত রয়েছে ইত্যাদি। পাইথনে আপনার একটি আমদানি প্রয়োজন এবং স্ট্রিং লেটারেলের সাথে ফাংশন কলগুলি যুক্তি হিসাবে লিখুন যা আরও অনেক বেশি অক্ষর গ্রহণ করে। বেশিরভাগ ওয়ান-লাইনার পাঠ্যগুলিতে হেরফের করতে প্রচুর রেগেক্স ব্যবহার করে তাই এটি একটি "বড় সমস্যা"।
গিয়াকোমো আলজেটা

1
@ ওয়াজান্দ্রিয়া পাইথন ওয়ান-লাইনারদের পক্ষে খারাপ নয়, কোনও একটি লিখতে সক্ষম নয় এমন অর্থে নয়। গড়ে আমি 4-5 লাইন স্ক্রিপ্টগুলিকে ওয়ান-লাইনারে রূপান্তর করতে সক্ষম হয়েছি। তবে যেমনটি আপনি উল্লেখ করেছেন, এটি অন্যান্য ভাষার তুলনায় আরও স্পষ্টত (যেটি পাইথনের অন্যতম সুবিধাগুলি IMHO)। সুতরাং তারা পার্ল বা অযৌক বলার চেয়ে দ্বিগুণ বা ট্রিপল চরিত্রের গণনায় প্রবেশ করতে পারে (যার জন্য পাইথনের বিপরীতে কিছু লাইব্রেরি আমদানির দরকার নেই), এবং এটিই বেশিরভাগ লোকেরা অভিযোগ করেন - এই ওয়ান-লাইনারগুলির দৈর্ঘ্য। তবে আবার, আইএএমএইচও চরিত্রের গণনা সম্পর্কে তর্ক করা খুব ক্ষুদ্র; যদি কিছু কাজ করে - এটি কাজ করে
সের্গি কলডিয়াজহনি

উত্তর:


33

ব্যবহারিক অভিজ্ঞতার ভিত্তিতে আর একটি প্রতিক্রিয়া।

আমি যদি একটি প্রম্পটে সরাসরি লিখতে পারি যে কোডটি "ফেলে দেওয়া" হয় তবে আমি ওয়ান-লাইনার ব্যবহার করব। উদাহরণস্বরূপ, আমি এটি ব্যবহার করতে পারি:

for h in host1 host2 host3; do printf "%s\t%s\n" "$h" "$(ssh "$h" uptime)"; done

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

#!/bin/bash
# Check the uptime for each of the known set of hosts
########################################################################
#
hosts=(host1 host2 host3)

for h in "${hosts[@]}"
do
    printf "%s\t" "$h"
    uptime=$(ssh -o ConnectTimeout=5 -n "$h" uptime 2>/dev/null)
    printf "%s\n" "${uptime:-(unreachable)}"
done

জেনারালাইজিং, একজন বলতে পারেন

  • এক রৈখিক

    • সাধারণ কোড (অর্থাত্ "মাত্র" কয়েকটি "বিবৃতি), নির্দিষ্ট এক-বন্ধ উদ্দেশ্যে রচিত
    • যখনই এটি প্রয়োজন হয় দ্রুত এবং সহজেই লেখা যায় এমন কোড
    • নিষ্পত্তিযোগ্য কোড
  • লিপি

    • কোড যা (সম্ভবত) একাধিকবার বা দুইবার ব্যবহার করা হবে
    • কমপ্লেক্স কোডটির জন্য "কয়েকটি" এর চেয়ে বেশি বিবৃতি প্রয়োজন
    • অন্যদের দ্বারা বজায় রাখা দরকার কোড Code
    • অন্যদের দ্বারা বোঝার কোড
    • অপ্রয়োজনীয়ভাবে চালানোর কোড (উদাহরণস্বরূপ, থেকে cron)

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


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

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

@ মন্টিহার্ডার এই জাতীয় ক্ষেত্রে আমি এগুলি স্ক্রিপ্ট হিসাবে সংরক্ষণ করি তবে সেগুলি গিট রেপোতে সঞ্চয় করি। আমি তখন কেবল সাধারণ গিট ক্লোনটির মাধ্যমে আমার প্রয়োজন হয় এমন কোনও মেশিনে এগুলি ইনস্টল করতে পারি। এটা কাজের জন্য। ব্যক্তিগত ব্যবহারের জন্য আমি কখনই "রেসিপি" ফাইলটিতে কোড লিখি না (উদাহরণস্বরূপ আমি গিথুব স্নিপেট ব্যবহার করি না)। আমি আমার সমস্ত স্ক্রিপ্টগুলি একটি in হোম / বিন ডিরেক্টরিতে সংরক্ষণ করি যা আমি ১৯৯ 1997 সালে কলেজের সময় থেকেই রেখেছি (ইউনিভার্সিটিস সানোএসে)। আমি নিউরোম্যান্সার উপন্যাসটি থেকে ধারণা পেয়েছি যেখানে নায়ক এবং বিরোধী উভয়ই ব্যক্তিগত স্ক্রিপ্ট / প্রোগ্রামগুলিকে অস্ত্র হিসাবে ব্যবহারের জন্য রেখেছিলেন
slebetman

1
যদিও এটি প্রকৃত আলোচনার পক্ষে অবশ্যই স্পর্শকাতর, আপনার উদাহরণ স্ক্রিপ্টে আপনি set -- host1 host2 host3তখন for h in "$@"(বা কেবল for h) ব্যবহার করতে পারেন যা স্ক্রিপ্টটি পসিক্স-বহনযোগ্য করে তুলবে। :-)
ওচার্জিন

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

10

একটি স্ক্রিপ্ট লিখুন যখন:

  • আরও কোড প্রয়োজন
  • আপনি পঠনযোগ্যতা মূল্য
  • কোডটি কী করে তা দেখানোর জন্য মন্তব্য যুক্ত করা প্রয়োজনীয় / দরকারী is
  • আপনাকে পরামিতিগুলি পাস করতে হবে
  • আপনি চান স্ক্রিপ্টটি তার নিজস্ব পরিবেশে চালিত হোক (ভেরিয়েবল ইত্যাদি)
  • আপনি সম্ভবত আরও কিছু জটিল উদ্দেশ্যে কোডটি পুনরায় ব্যবহার / অভিযোজিত করতে যাচ্ছেন

ওয়ান-লাইন লিখুন যখন:

  • কোডের একটি অল্প পরিমাণই প্রয়োজনীয়
  • আপনি বর্তমান শেল সংজ্ঞায়িত ভেরিয়েবল অ্যাক্সেস করতে চান
  • আপনার দ্রুত এবং নোংরা সমাধান দরকার

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

9

যখন প্রয়োজনীয় সিরিজের কমান্ডগুলি মোটামুটি সংক্ষিপ্ত এবং / অথবা একটি বৃহত পাইপলাইন বা কমান্ড ওরফে অংশ হিসাবে ব্যবহারযোগ্য হতে পারে এমন কোনও ফলাফল তৈরি করে, এটি একটি ভাল ওয়ান-লাইনার হতে পারে।

মূলত, আমি মনে করি যে ওয়ান-লাইনারগুলি সাধারণত এমন জিনিস যা সমস্যা এবং ব্যবহৃত কমান্ড উভয়ের সাথে পরিচিত একটি পাকা সিস্টেম অ্যাডমিনিস্ট্রেটর খুব বেশি চিন্তাভাবনা না করেই ঘটনাস্থলে লিখতে পারে।

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

পাইথনে, ইনডেন্টেশন সিনট্যাক্সের অংশ, সুতরাং আপনি যদি ওয়ান-লাইনার লিখেন তবে আপনি আক্ষরিকভাবে ভাষার বৈশিষ্ট্যগুলি তাদের সম্পূর্ণ পরিমাণে ব্যবহার করতে পারবেন না।

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

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

সেরা প্রায়ই শত্রু যথেষ্ট , এবং এই অনেক এখানে প্রযোজ্য।

এবং যদি আপনি পার্লের সাথে পরিচিত হন তবে আপনি ইতিমধ্যে টিএমটিওটিডিআইয়ের কথা শুনে থাকতে পারেন: এটি করার একাধিক উপায় ছাড়াও


"বা শেল ফাংশন" উল্লেখ করার জন্য এক
গ্লেন জ্যাকম্যান

7

দয়া করে মনে রাখবেন এটি একটি ব্যক্তিগত মতামত; লবণের এক দানা দিয়ে এটি নিন।

  1. যদি কমান্ডটি এর মধ্যে ফিট হয় তবে বলুন, 80 টি অক্ষর, ওয়ান-লাইনার ব্যবহার করুন। দীর্ঘ কমান্ড লাইনের সাথে কাজ করা কঠিন। পুনরাবৃত্তির সমস্যাও রয়েছে, দেখুন # 2

  2. যদি আপনার একাধিকবার কমান্ড (গুলি) চালানোর প্রয়োজন হয় তবে স্ক্রিপ্ট ব্যবহার করুন। অন্যথায়, একটি ওয়ান-লাইনার ব্যবহার করুন, শর্ত # 1 পূরণ হয়েছে।

  3. এটি খুব সাবজেক্টিভ, তবে হ্যাঁ, আমি শেল, পার্ল বা অ্যাডকে ওয়ান-লাইনারগুলির জন্য আমার যাওয়ার সরঞ্জাম হিসাবে দেখছি।
  4. # 1, # 2, # 3 দেখুন।

3
আমি এখনও পর্যন্ত যে উত্তরগুলি দেখেছি তা পছন্দ করছি। আমি বিশেষত আপনার ১ ম পয়েন্টটি পছন্দ করি - আমার উত্তরে আমি যে বিষয়গুলির উল্লেখ করার পরিকল্পনা করছিলাম সেগুলির মধ্যে একটি হ'ল - এমনকি ^ এক্স ^ ই দিয়ে, কমান্ড- এ সম্পাদনা করার চেয়ে আপনার প্রিয় সম্পাদনায় কোনও স্ক্রিপ্ট সম্পাদনা করা অনেক সহজ এবং অনেক বেশি আনন্দদায়ক- লাইন।
কাস

2
পয়েন্ট 4 যদিও উত্সাহিত একরকম অর্থহীন বলে মনে হচ্ছে। :)
অ্যান্টনি জি -

@ ক্যাস: কন্ট্রোল-অ্যারো-কী (বা Alt + f / alt + b) দিয়ে আপনি খুব দ্রুত ওয়ান-লাইনারে ঘুরতে পারেন । বিশেষত যদি আপনার 220 মিমি এর মতো স্বল্প-ইশ দেরির সাথে 50 / সেকেন্ডের মতো আপনার কী অটো-রিপিট সেটিংস থাকে। আপনি ওয়ান-লাইনারের মধ্যে কন্ট্রোল-এস / কন্ট্রোল-আর আইকনও ব্যবহার করতে পারেন, যদিও এটি আপনাকে আবার অন্য ইতিহাসে নিয়ে যেতে পারে। আপনি যদি নিয়ন্ত্রণ-ডাব্লু, Alt + ব্যাকস্পেস, Alt + d, এবং কন্ট্রোল-ওয় সঙ্গে ভাল হন তবে আপনি কেবল কীবোর্ড কার্সার চলাচলে অনেক কিছু করতে পারেন।
পিটার কর্ডস

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

@ পিটারকর্ডস খুব দ্রুত কার্সারটি সরিয়ে নিয়েছে এমনকি আপনি vi / vim এর মতো শালীন সম্পাদক হিসাবে যা করতে পারেন তার সাথে তুলনাও শুরু করে না। বিটিডাব্লু, ^ এক্স ^ ই বাশ-এডিটর বা IS ভিজুয়াল (এবং কিছু অন্যান্য শেল z zsh, আমিও মনে করি config কনফিগারযোগ্য)। লাইন-ফিডস এবং ইনডেন্টেশন byুকিয়ে আমি অজ্ঞাতসারে এমন কিছু তৈরি করেছি যা অপঠনযোগ্য জগাখিচুড়ি করে ফেলা - এটি ছাড়া নেস্টেড ব্রেস বা বন্ধনীগুলিতে হারিয়ে যাওয়া সহজ। বিটিডব্লিউ আমার টার্মিনাল উইন্ডোজগুলি 250 টিরও বেশি অক্ষরের প্রশস্ত, তাই আমার ওয়ান-লাইনার মোড়ানো না হলেও খুব দীর্ঘতর হতে পারে।
কাস

7

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

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

আমি আমার শেল ইতিহাসটি 5000 টাকার বেশি লাইনে সেট করে রেখেছি, প্রতিটি টার্মিনাল পৃথক ইতিহাস এবং প্রতি দূরবর্তী লগইন ইত্যাদিতে on আমি এই ইতিহাসগুলিতে কয়েক সপ্তাহ আগে যে এক-লাইন কমান্ডটি বিকাশ করেছি তা সন্ধান করতে না পেরে আমি ঘৃণা করি এবং আমার আবার প্রয়োজন হবে বলে মনে করি না, তাই আমার কৌশলটি।

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


1
আপ-তীর এবং সম্পাদনার জন্য +1 ওয়ান-লাইনার দুর্দান্ত, বনাম কোনও স্ক্রিপ্টের জন্য এটি চালিত থেকে আলাদাভাবে কী করে তা নিয়ন্ত্রণ করার জন্য কমান্ড-লাইন বিকল্পগুলি প্রয়োগ করে। উদাহরণস্বরূপ, কিছু ফাইলের উপর লুপ করে থাকা ওয়ান-লাইনারে হার্ড বনাম সফট লিঙ্কগুলির জন্য lnবনাম পরিবর্তন করুন ln -s
পিটার কর্ডস

5

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

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

প্রোগ্রামিংয়ের জন্য কোন ভাষা ব্যবহৃত হয় তা নির্বিশেষে এটি।

অন্যান্য কর্মক্ষেত্রগুলিতে একই / বিভিন্ন রীতিনীতি বা প্রত্যাশা থাকতে পারে, এমনকি এমনকি এটি লিখিতও থাকতে পারে।

বাড়িতে, আপনি যা পছন্দ করেন তা করেন।

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

পুনরাবৃত্তিমূলক কার্যগুলির জন্য আমি স্ক্রিপ্টগুলিও লিখি যা আমি প্রতিবারই একইভাবে করতে চাই, এমনকি সেগুলি সহজ হলেও,

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

আমি ইন্টারেক্টিভ শেলগুলিতে সুবিধার্থে শেল ফাংশন (খুব কমই কমনীয় উপকরণ) ব্যবহার করি , উদাহরণস্বরূপ ডিফল্টরূপে নির্দিষ্ট কমান্ডের বিকল্প যুক্ত করতে (এর -Fজন্য ls) বা কিছু কমান্ডের বিশেষ বৈচিত্র তৈরি করার জন্য ( pmanএখানে একটি manকমান্ড যা কেবল পসিক্স ম্যানুয়ালগুলিতে দেখে থাকে, উদাহরণস্বরূপ) ।


5

দেখে মনে হচ্ছে আমি এটিতে সংখ্যালঘু দৃষ্টিভঙ্গি রেখেছি।

"লিপি" শব্দটি ইচ্ছাকৃতভাবে বিভ্রান্তিকর, এ থেকে মুক্তি পান। আপনি সেখানে সম্পূর্ণরূপে এবং ব্যবহার করলেও এটি সেখানে লেখা সফ্টওয়্যারbashawk

একটি দলের মধ্যে, আমি কোনও সরঞ্জাম দ্বারা প্রয়োগ করা কোড-পর্যালোচনা প্রক্রিয়া সহ সফ্টওয়্যার লিখতে পছন্দ করি (গিথুব / গিটল্যাব / জারিত)। এটি বোনাস হিসাবে সংস্করণ নিয়ন্ত্রণ দেয়। আপনার যদি একাধিক সিস্টেম থাকে তবে ক্রমাগত মোতায়েনের সরঞ্জাম যুক্ত করুন। এবং কিছু পরীক্ষার স্যুট, যদি লক্ষ্য সিস্টেমগুলি গুরুত্বপূর্ণ। আমি এগুলি সম্পর্কে ধর্মীয় নই, তবে উপকারিতা এবং ব্যয়গুলি বিবেচনা করব।

আপনার যদি প্রশাসকদের একটি দল থাকে, তবে সর্বাধিক সহজতম vim /root/bin/x.shপরিবর্তন-সম্পর্কিত যোগাযোগ, কোডের পাঠযোগ্যতা এবং ক্রস-সিস্টেম বিতরণের ক্ষেত্রে একটি বিপর্যয়। প্রায়শই একটি গুরুতর ত্রুটির জন্য অনুমিত "ভারী" প্রক্রিয়াটির চেয়ে বেশি সময় / অর্থ ব্যয় হয়।

আমি আসলে এমন কোনও জিনিসের জন্য ওয়ান-লাইনার পছন্দ করি যা সেই "ভারী" প্রক্রিয়াটির প্রাপ্য নয়। কয়েকটি কী-স্ট্রোক সহ এগুলি দ্রুত পুনরায় ব্যবহার করা যেতে পারে, যদি আপনি নিজের শেল ইতিহাসকে কার্যকরভাবে ব্যবহার করতে জানেন তবে; সম্পর্কিত না থাকা সিস্টেমগুলির মধ্যে সহজেই আটকানো (যেমন বিভিন্ন গ্রাহক)।

(পর্যালোচনা করা হয়নি) ওয়ান-লাইনার এবং পর্যালোচিত সফ্টওয়্যার ("স্ক্রিপ্টস") এর মধ্যে গুরুত্বপূর্ণ পার্থক্য: আপনি যখন ওয়ান-লাইনারগুলি কার্যকর করেন তখন দায়িত্ব আপনার উপর পুরোপুরি থাকে। তুমি নিজেকে বলতে পারি "আমি শুধু এই এক মাছ ধরার নৌকা কোথাও পাওয়া যায় নি, আমি বুঝতে ছাড়াই এটি দৌড়ে কি অনুসৃত আমার দোষ না" - আপনি জানতাম তুমি পর্যালোচনা না করা এবং অপরীক্ষিত বিট অফ সফটওয়্যার দৌড়াচ্ছে, তাই এটি হল আপনার দোষ। নিশ্চিত করুন যে এটি পর্যাপ্ত পরিমাণে আপনি ফলাফলগুলি আগে থেকেই দেখতে পারেন - যদি না করেন তবে ধিক্কার জানাতে হবে।

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


1
ভালো কথা: আমি নিজেই "প্রোগ্রাম" ওভার "স্ক্রিপ্ট" শব্দটি পছন্দ করি।
গ্লেন জ্যাকম্যান

5

আমি অবশ্যই বলব যে আমি প্রশ্নের প্রথম অংশগুলির সংলগ্নতায় কিছুটা আতঙ্কিত। ইউনিক্স স্ক্রিপ্টিং ল্যাঙ্গুয়েজগুলি পুরোপুরি প্রোগ্রামিং ভাষা এবং প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি হ'ল ভাষা , যার অর্থ এগুলি হ'ল মানব ভাষার মতো অসীমভাবে তাত্পর্যপূর্ণ এবং নমনীয়। এবং "অসীম হতাশা এবং নমনীয়তা" এর অন্যতম বৈশিষ্ট্য হ'ল কোনও কিছু প্রকাশের প্রায় একদমই "সঠিক উপায়" নেই - বিভিন্ন ধরণের উপায় রয়েছে এবং এটি একটি ভাল জিনিস! সুতরাং, হ্যাঁ, অবশ্যই এটি ব্যক্তিগত পছন্দের বিষয়, এবং এতে কোনও ভুল নেই। যে কেউ বলে যে কিছু করার একমাত্র উপায় আছে,

একসময় আমার নিজের লেখা "দরকারী" ছোট স্ক্রিপ্টগুলি পূর্ণ~/bin ছিল । তবে আমি বুঝতে পেরেছিলাম যে তাদের বেশিরভাগই আমি তাদের লেখার দিনটি ব্যবহার করেছি এবং আর কখনও দেখিনি। সুতরাং যত বেশি সময় যায়, আমার ডিরেক্টরি তত ছোট হয় ।bin

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

যেহেতু আমি স্ক্রিপ্টগুলি এত বেশি লেখি না (এবং, আমার ধারণা, "" এক-লাইনার "পক্ষে):

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

4

আমি বিশ্বাস করি যে বেশিরভাগ সময় "ওয়ান-লাইনার" এর জন্য অনুরোধটি আসলে "সাউন্ড কামড়" এর অনুরোধ হয়, তা হল:

সাংবাদিকতার প্রসঙ্গে, একটি শব্দের কামড় একটি সংক্ষিপ্ত বাক্য বা বাক্য দ্বারা চিহ্নিত করা হয় যা স্পিকার যা বলতে চাইছিল তার সারমর্মটি ধারণ করে এবং তথ্যের সংক্ষিপ্তসার হিসাবে ব্যবহৃত হয় ...

লোকেরা সংক্ষিপ্ততম কোডের জন্য অনুরোধ করে যা অনুরোধ করা প্রশ্নের সমাধান দেখায়।

কখনও কখনও, "সাউন্ড কামড়" -এর বক্তৃতা হ্রাস করার কোনও উপায় নেই পাশাপাশি একটি স্ক্রিপ্টকে একটি ছোট "ওয়ান-লাইনারে" হ্রাস করা অসম্ভবও হতে পারে। এই জাতীয় ক্ষেত্রে একমাত্র সম্ভাব্য উত্তর হ'ল স্ক্রিপ্ট।

এবং, সাধারণভাবে, একটি "সাউন্ড কামড়" কখনই পুরো বক্তৃতার ভাল বিকল্প হয় না। সুতরাং, একটি "ওয়ান লাইনার" সাধারণত কোনও ধারণা জানাতে বা সেই ধারণার ব্যবহারিক উদাহরণ দেওয়া ভাল। তারপরে, ধারণাটি বোঝার পরে এটি কোনও স্ক্রিপ্টে প্রসারিত (প্রয়োগ) করা উচিত।

সুতরাং, একটি ধারণা বা ধারণা জানাতে একটি "ওয়ান-লাইনার" লিখুন।

আপনার সাধারণ কোডটি সম্পূর্ণ স্ক্রিপ্ট হিসাবে ওয়ান-লাইনার হিসাবে লিখুন।


1

আপনি "স্ক্রিপ্টগুলির ভয় এবং ঘৃণা" সম্পর্কে জিজ্ঞাসা করছেন। এটি Q + A পরিস্থিতির কারণে হয়, যেখানে প্রায়শই উত্তরটি বলে: এটির এই পদক্ষেপ এবং এটি প্রয়োজন, তবে আমি এটি একটি লাইনেও রাখতে পারি (যাতে আপনি এটি অনুলিপি করতে পারেন এবং এটি একটি দীর্ঘ সরল কমান্ড হিসাবে ব্যবহার করতে পারেন)।

আপনি কখনও কখনও কেবল অনুমান করতে পারেন যে কিউ আরও দ্রুত এবং নোংরা অনুলিপিযুক্ত পেস্ট সমাধানের মাধ্যমে আরও ভাল পরিবেশন করা হয়েছে, বা যদি "সুন্দর" স্ক্রিপ্টটি ঠিক কি-তে বোঝার দরকার হয় তবে।

এখানে প্রচুর উপকারিতা এবং কনস সত্য, তবে তবুও তারা বিষয়টি অনুপস্থিত। আমি এমনকি এও বলব যে Q এর সংজ্ঞাগুলি কার্যকর নয়।

শেল ইতিহাসের ফাইলগুলি "ওয়ান লাইনার", তবে তারা সেভ হয়। operate-and-get-next (C-o)এমনকি বাশ ফাংশন আপনাকে সেগুলি স্বয়ংক্রিয়ভাবে পুনরাবৃত্তি করতে দেয়।

আমি উল্লেখ করা শব্দ ফাংশনটি খুব কমই দেখতে পাচ্ছি । "স্ক্রিপ্ট" এবং "একটি রেখাযুক্ত" উভয়ই সঞ্চয় করার উপায় এটি। এবং কয়েকটি কীস্ট্রোকের সাহায্যে আপনি উভয় ফর্ম্যাটের মধ্যে স্যুইচ করতে পারেন। একটি যৌগিক কমান্ড প্রায়শই উভয় ফিট করতে পারে।

history -r fileকোনও ডিফল্ট ইতিহাস ফাইল থেকে নয়, যে কোনও ফাইল থেকে এক বা একাধিক কমান্ড লাইন (এবং মন্তব্য) পড়ার উপায়। এটি কিছুটা ন্যূনতম সংগঠন নেয়। কমান্ড লাইনের সংস্করণ (কিছু) পুনরুদ্ধার করতে আপনার কোনও বড় ইতিহাসের ফাইলের আকার এবং ইতিহাস অনুসন্ধানের উপর নির্ভর করা উচিত নয়।

কার্যগুলি একইভাবে সংজ্ঞায়িত করা উচিত। প্রারম্ভিকদের জন্য, thisfunc() {...}আপনার বাড়ির দির একটি ফাইল "ফাংশন" রাখুন এবং এটি উত্স করুন। হ্যাঁ এটি কিছু ওভারহেড, তবে এটি সাধারণ সমাধান।

আপনি যদি প্রতিটি কমান্ড লাইন এবং প্রতিটি স্ক্রিপ্টের ভিন্নতা একটি পৃথক ফাইলে সংরক্ষণ করেন তবে এটি ফাইল সিস্টেম ব্লকগুলির (তাত্ত্বিক, তবে উদ্দেশ্যমূলক) বর্জ্য।

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


@ সিটরাম: আপনার এক লাইনের সত্যিই আন-অনিলিনারিশ বৈশিষ্ট্য রয়েছে: শেবাং লাইন, নিউলাইন, চারটি ইউটিলিটি কল - এর মধ্যে দুটি "প্রোগ্রাম" রয়েছে sed আমার মনে হয় আসল পার্ল স্ক্রিপ্টটি আরও ভাল লাগছিল এবং দ্রুত দৌড়েছিল এবং 60 লাইনে ছড়িয়ে দিয়ে কোনও বাইট নষ্ট করেনি। এবং পার্ল আপনাকে বেশ খানিকটা চেপে ধরতে দেয়।

আমার জন্য, এটি হ'ল এক ধরনের লাইনার এড়ানো উচিত। আপনি কি আপনার কমান্ড লাইনে এটি (আটকানো) রাখতে চান? না, এবং তারপরে, আপনি যদি কোনওভাবে এটি কোনও ফাইলে সংরক্ষণ করেন (কোনও স্ক্রিপ্ট বা ফাংশন নেই), আপনি সম্ভবত এটি দেখতে দুটি বা তিনটি নতুন লাইন-বাইট বিনিয়োগ করবেন --- দেখতে সুন্দর।


10 মিনিট পরে: আমি কেবল "দুটি সেড প্রোগ্রাম" বলতে পারি বা এটিতে "দুটি সেড বিকল্প / কল" আছে কিনা তা পরীক্ষা করে দেখতে চেয়েছিলাম। কিন্তু সীতারামের উত্তর চলে গেছে। আমার উত্তরটি এখনও আশাবাদী করে তোলে আমি আশা করি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.