কমান্ড লাইন উপর ইউনিক্স কমান্ড ডকুমেন্টেশন


7

আমি টিউটোরিয়ালের উদ্দেশ্যে একটি টেক্সট ফাইলে শেষ কমান্ড এবং শেষ কমান্ডের আউটপুট যুক্ত করতে চাই।

উদাহরণস্বরূপ: আমি একটি করার পরে ls আমার হোম ডিরেক্টরির মধ্যে আমি পর্দায় এই দেখতে

bguiz@sheen:~$ ls
Desktop     Music    Documents

তারপর আমি একটি একক কমান্ড প্রবেশ করতে সক্ষম হব যা একটি টেক্সটফিল্ডে নিম্নলিখিতটি যুক্ত করবে cmd.txt

$ ls
Desktop     Music    Documents

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

এ পর্যন্ত আমি এই পর্যন্ত রান্না করেছি:

echo -n "\$ " >> cmd.txt; echo !-1:p >> cmd.txt; !-1 >> cmd.txt

এটি কাজ করে, তবে বরং ছদ্মবেশী, এবং বেশ কয়েকটি গোষ্ঠী রয়েছে যেমন সঠিক স্ক্রিন ফর্ম্যাটিং সংরক্ষণ করতে সক্ষম নয়।

একটি আরো মার্জিত সমাধান?


উত্তরগুলির জন্য আপনাকে ধন্যবাদ, কিন্তু আমার একটি প্রয়োজনীয়তা আছে যে এটি পাইপের সাথে কাজ করতে হবে, যেমন .:

ls -lart | grep ^d

ফাইলটিতে এই যোগ করা প্রয়োজন:

$ ls -lart | grep ^d
drwx------ 14 bguiz staff   4096 2010-03-03 15:52 .cache
drwx------  5 bguiz staff   4096 2010-03-03 09:38 .ssh

উত্তর:


3

[script.ksh] "script.ksh ls" দিয়ে চালান

#!/bin/ksh

OUTPUT="cmd.txt"

if [[ $# -eq 0 ]];then
  print "no command to run"
  exit
fi

# dump command being run to file
echo $@ >> $OUTPUT

# run command and output stdout to the screen and file
$@ | tee -a $OUTPUT

@ ডুয়েন, উত্তরের জন্য ধন্যবাদ। আমি চেষ্টা, প্রতিস্থাপন $1 সঙ্গে $@ এবং পাইপ অন্তর্ভুক্ত পর্যন্ত যে কাজ। আমার মূল প্রশ্নটি সম্পাদনাটি দেখুন আমার কী অর্থ।
bguiz

আমি কিছুক্ষণের জন্য এই দিকে তাকালাম কিন্তু একটু থামলাম ... সমস্যাটা হলো | শেল গুরুত্বপূর্ণ এবং কখনও স্ক্রিপ্ট পাস পায়। স্ক্রিপ্টে পরিবর্তনগুলি দিয়ে আপনি পাইপ থেকে পালিয়ে যেতে পারেন (\ |) তবে আমি অনুমান করি যে এটি কোনও না।
Duane

10

আপনি চেষ্টা করছেন চতুরতার চেয়ে বরং সহজ:

$ script cmd.txt

আপনি এখানে নথিভুক্ত করতে চান কি

তারপর কন্ট্রোল-ডি আঘাত।

আপনি ইচ্ছা করলে টীকা যোগ করার জন্য পরবর্তী তারিখটিতে ফাইলটি সম্পাদনা করতে পারেন এবং আপনি এটি ব্যবহার করতে পারেন

$ script -a cmd.txt

একটি বিদ্যমান ফাইল আরো টেক্সট যোগ করতে।

উপলব্ধ বিকল্প বাস্তবায়ন মধ্যে উল্লেখযোগ্যভাবে পরিবর্তিত বলে মনে হচ্ছে।

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

অবশেষে জিএনইউ সংস্করণ সতর্ক করে vi টাইপ স্ক্রিপ্টগুলিতে ভালভাবে প্রতিনিধিত্ব করা হয় না (এবং আমি কল্পনা করি যে এই সতর্কতা শর্ট ব্যবহার করে যে সমস্ত অন্যান্য কমান্ডের সমানভাবে ভালভাবে প্রয়োগ করে)।


@ ডমকি, এটা দুর্দান্ত, তবে আমি আরো দারুণ নিয়ন্ত্রণ চাই, প্রতিটি কমান্ডটি যে আমি রেকর্ড করতে চাই তা অনুসরণ করে একটি কমান্ড প্রবেশ করে। এবং আমিও সক্ষম হতে হবে echo "Something" >> cmd.txt" পাশাপাশি কমান্ডের জন্য কমান্ডের মধ্যে।
bguiz

script -a -c "some command" কিছু কমান্ড অনুসরণ সব পরিষ্কার Script started... এবং Script done... এটা আমার জন্য কাজ করতে পারে মত লাইন দেখায়।
bguiz

@ বাগিজ আপনি একটি পরিষ্কার-আপ স্ক্রিপ্ট করতে পারেন যাতে: প্রথমে আপনি একটি নতুন কমান্ড তৈরি করেন যা মার্কারকে ইকো করে। তারপরে যখন আপনি একটি কমান্ড রেকর্ড করতে চান তখন আপনি সেই কমান্ড চালান। পরিষ্কার করার সময় আপনি কোন কমান্ড সংরক্ষণ করতে চান তা নির্ধারণ করতে আপনি সেই মার্কারটি ব্যবহার করতে পারেন। ভাষ্য হিসাবে আপনি একইভাবে একটি নতুন কমান্ড করতে পারেন। এটা শুধু আপনার মন্তব্য সঙ্গে একটি চিহ্নিতকারী প্রতিধ্বনি করতে পারেন।
Egon

4

একটি স্ক্রিপ্ট লিখুন script.sh নিম্নলিখিত মত আপনি মন্তব্য আকারে টীকা সন্নিবেশ করা হয়েছে:

#!/bin/sh -v

# Annotating the behaviour of the ls command
ls -l

# Other comments on the next command
cmd

মনে রাখবেন -v প্রথম লাইন পরিবর্তন করুন:

-v verbose       The shell writes its input to standard error as it is read.

তারপর ফাইলটিতে stdout এবং stderr উভয় পুনঃনির্দেশিত স্ক্রিপ্টটি চালান cmd.txt ব্যবহার:

$ ./script.sh > cmd.txt 2>&1

ফাইল cmd.txt এনটাইটেশন, কমান্ড এবং তাদের আপেক্ষিক আউটপুট যেমন থাকবে:

# Annotating the behaviour of the ls command
ls -l
total 1824
drwxr-xr-x 11 mrucci mrucci    4096 2010-02-14 18:16 apps
drwxr-xr-x  2 mrucci mrucci    4096 2010-02-20 12:54 bin
-rw-------  1 mrucci mrucci  117469 2010-02-25 11:02 todo.txt

# Other comments on the next command
cmd
./testscript.sh: 7: cmd: not foun

পিএস: স্ক্রিপ্টে অ্যাক্সেস করার অনুমতি দিতে মনে রাখবেন:

$ chmod +x script.sh

1

এই পরিস্থিতিতে, আমি সাধারণত দুটি কৌশল ব্যবহার করি:

sh -x script

অথবা কেবল কমান্ডগুলি চালান এবং কপিরাইটটি একটি ফাইলে সংরক্ষণ করার জন্য অনুলিপি ব্যবহার করুন।

'Sh -x' আউটপুটটিতে স্বাভাবিক PS1 প্রম্পট অন্তর্ভুক্ত হয় না - এটি PS3 ব্যবহার করে যা '+', আইআইআরসি-তে ডিফল্ট থাকে। এবং এটি আউটপুটটিকে সামান্য সংশোধন করে - আপনি যে শেলটি ব্যবহার করছেন সেটির উপর নির্ভর করে বিশদ বিট পরিবর্তিত হয় (তাই 'bash' 'ksh' বা বোর্ন শেলের চেয়ে বেশি জগাখিচুড়ি করে)। অনুলিপিটি পরিচালনা করতে পারে এমন তুলনায় আমি কমপক্ষে আরও বেশি উপাদান প্রয়োজন, তাই স্ট্যাকওভারফ্লো এবং সুপার ইউসারের জন্য এটি আমার প্রধান মোডাস অপারেন্ডি।


না আমার ম্যাক অপারেটিং সিস্টেম 10.5 না আমার ডেবিয়ান লেনি বক্স মত -x। :: sigh :: ম্যান পৃষ্ঠাগুলি স্ক্রিপ্টের জন্য কোনও মানের কোন উল্লেখ করে না। ইউনিক্স যুদ্ধ শেষ অবশেষ, আমি অনুমান।
dmckee

MacOS X 10.5 (বা 10.4, ..., অথবা বর্তমানে 10.6.2) -এ 'sh -x' এর সাথে আমার কোন সমস্যা হয়নি। আপনি কোন শেল ব্যবহার করছেন? 'শএক্স' সর্বাধিক শেলের মধ্যে সাধারণ - আমি স্বীকার করতে হবে, আমি যে এটি সমর্থন না যে সচেতন ছিল না।
Jonathan Leffler

@ ডমকি: যখন আপনি 'sh -x' লিখেন, শেলটি স্ক্রিপ্টটির জন্য পথ-ভিত্তিক অনুসন্ধান করে না - আপনাকে অবশ্যই সম্পূর্ণ পথটি নির্দিষ্ট করতে হবে।
Jonathan Leffler

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