একটি পাঠ্য ফাইলে একাধিক সিক্যুয়াল কমান্ডের আউটপুট লিখুন


22

আমি সর্বশেষতম ফায়ারফক্স চেক করার চেষ্টা করেছি এবং একটি টিএক্সটি ফাইলে সমস্ত হ্যাশ পেতে চাই।

আমি যা করার চেষ্টা করি তা হ'ল:

sha1sum firefox.tar.gz > sha.txt

এবং আমি এছাড়াও চেষ্টা:

md5sum firefox.tar.gz > sha.txt | sha1sum firefox.tar.gz > sha.txt | sha512sum firefox.tar.gz > sha.txt 

তবে এই ক্ষেত্রে কেবল শেষটি sha512 sha.txt এ মুদ্রিত হয়।

আমি কি ভুল করছি? দয়া করে ওখানকার কেউ আমাকে এই সাহায্য করতে পারেন?

উত্তর:


31

যেহেতু অন্যরা ইতিমধ্যে >(ওভাররাইট) এবং >>(সংযোজন) পুনঃনির্দেশ অপারেটরগুলির মধ্যে পার্থক্যটি চিহ্নিত করেছে , আমি কয়েকটি সমাধান দিতে যাচ্ছি।

  1. আপনি একক ফাইলে সমস্ত কমান্ডের আউটপুট প্রেরণের জন্য কমান্ড গ্রুপিং {}বৈশিষ্ট্যটি ব্যবহার করতে পারেন bash:

    { sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ;} >checksum.txt
  2. পর্যায়ক্রমে আপনি কমান্ডগুলি সাব-শেলটিতে চালাতে পারেন ():

    ( sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ) >checksum.txt

1
কোন সমাধানটিকে আরও সাধারণ / বহনযোগ্য {}বা বিবেচনা করা হয় ()? ধন্যবাদ.
কোডেভিয়েটর

5
@codeaviator subshell: ()
হিমাইল

5

পরবর্তী কমান্ডগুলির >>পরিবর্তে আপনাকে অ্যাপেন্ড রিডাইরেক্টর ব্যবহার করতে হবে >যেমন

sha1sum zeromq-4.1.2.tar.gz > sha.txt
md5sum zeromq-4.1.2.tar.gz  >> sha.txt 
sha512sum zeromq-4.1.2.tar.gz >> sha.txt 

Appending Redirected Outputবাশ ম্যানুয়াল পৃষ্ঠা ( man bash) এর বিভাগটি দেখুন ।


1

>Redirector কমান্ডের আউটপুট লিখেছেন ( stdoutনা stderr- আপনি ব্যবহার 2>যে জন্য) এটিকে পরে নির্বাচিত ফাইল করতে। যদি এটি ইতিমধ্যে বিদ্যমান থাকে তবে ফাইলটি ওভাররাইট করা হবে।

এই আচরণটি আপনার কমান্ডগুলির প্রথমটির জন্য দরকারী: যদি বিদ্যমান ফাইল থাকে তবে এটি মুছে ফেলা উচিত এবং নতুনটির সাথে এটি প্রতিস্থাপন করা উচিত।

যাইহোক, পূর্ববর্তীগুলি প্রতিস্থাপনের পরিবর্তে আপনার আরও সমস্ত আউটপুট সংযোজন করা দরকার, আপনাকে অ্যাপেন্ড-রিডাইরেক্টর ব্যবহার করতে হবে >>। এই যদি এটি এখনো বিদ্যমান নেই ফাইল তৈরি করবে, কিন্তু যদি appends , ফাইল থেকে আপনাকে পুনঃনির্দেশিত আউটপুট যদি এটা আগে থেকেই আছে।


এবং দয়া করে |এক লাইনে একাধিক কমান্ড লেখার জন্য পাইপটি ব্যবহার করবেন না , যা প্রথম কমান্ডের আউটপুট ( stdout) কে দ্বিতীয় কমান্ডের ইনপুট ( stdin) এ পুনর্নির্দেশ করবে ।

আপনি সেমিকোলন ( ;) ব্যবহার করে কেবল একের পর এক কমান্ড চালাতে বাশকে বলতে পারেন, যেন এটি কোনও স্ক্রিপ্ট ফাইল। যদি কোনও কমান্ড ব্যর্থ হয় (রিটার্ন কোড 0 নয়), বাকি কমান্ডগুলি এখনও কার্যকর হয়।

অথবা আপনি লজিক অপারেটরগুলি AND ( &&) বা OR ( ||) বাছাই
করতে পারেন : আপনি যদি &&দুটি কমান্ড সংযোগ করতে ব্যবহার করেন তবে দ্বিতীয়টি কেবল কার্যকর করা হবে, যদি প্রথমটি সফল হয় (রিটার্ন কোডটি 0 হয়)। যদি এটি ব্যর্থ হয়, নিম্নলিখিত কমান্ডগুলির মধ্যে কোনওটি চলবে না। তবে শুধুমাত্র দ্বিতীয় কমান্ড রান যদি প্রথম এক ব্যর্থ (আগমন কোড সেটি 0 না)!
||

সুতরাং আপনার ক্ষেত্রে আমি আপনাকে সেমিকোলনটি ব্যবহার করার পরামর্শ দিচ্ছি:

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