সমস্ত টার্মিনাল আউটপুট একটি ফাইলে সংরক্ষণ করুন


61

কমান্ড সহ কোনও ফাইলের মধ্যে সমস্ত টার্মিনাল আউটপুট সংরক্ষণ করার কোনও উপায় আছে?

  • আমি পুনঃনির্দেশের কথা বলছি না command > file.txt
  • ইতিহাস নয় history > file.txt, আমার সম্পূর্ণ টার্মিনাল পাঠ্য দরকার
  • হটকিসের সাথে নয়!

কিছুটা এইরকম terminal_text > file.txt


একটি সম্ভাব্য সদৃশ , যাইহোক ধন্যবাদ :)
ABCDexter

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

1
টার্মিনাল মেনু -> শেল -> এখানে যেমন পাঠ্য রফতানি করে দেখুন: mactricksandtips.com/2013/04/save-terminal-text-output.html
ম্যাগনে

উত্তর:


70

আপনি ব্যবহার করতে পারেন script। এটি মূলত সেই scriptসেশনে টার্মিনালে মুদ্রিত সমস্ত কিছু সংরক্ষণ করবে ।

থেকে man script:

script makes a typescript of everything printed on your terminal. 
It is useful for students who need a hardcopy record of an 
interactive session as proof of an assignment, as the typescript file 
can be printed out later with lpr(1).

আপনি scriptকেবলমাত্র scriptটার্মিনালে টাইপ করে একটি অধিবেশন শুরু করতে পারেন , পরবর্তী সমস্ত কমান্ড এবং তার ফলাফলগুলি typescriptবর্তমান ডিরেক্টরিতে নামের একটি ফাইলে সংরক্ষণ করা হবে । আপনি ফলাফলটি অন্য কোনও ফাইলে সংরক্ষণ করতে পারেন ঠিক এই জাতীয়ভাবে শুরু scriptকরে:

script output.txt

screenসেশনের লগআউট করতে (সামগ্রী সংরক্ষণ করা বন্ধ করুন), কেবল টাইপ করুন exit

এখানে একটি উদাহরণ:

$ script output.txt
Script started, file is output.txt

$ ls
output.txt  testfile.txt  foo.txt

$ exit
exit
Script done, file is output.txt

এখন যদি আমি ফাইলটি পড়ি:

$ cat output.txt

Script started on Mon 20 Apr 2015 08:00:14 AM BDT
$ ls
output.txt  testfile.txt  foo.txt
$ exit
exit

Script done on Mon 20 Apr 2015 08:00:21 AM BDT

scriptএছাড়াও অনেক অপশন শান্তভাবে চলমান EG করেছে -q( --quietদেখাচ্ছে / প্রোগ্রাম বার্তা সংরক্ষণ না করে), এটি একটি নির্দিষ্ট কমান্ড চালাতে পারেন -c( --command,) বরং একটি সেশন এটি অন্যান্য অনেক বিকল্প রয়েছে। man scriptআরও ধারণা পেতে চেক করুন ।


1
এটি কি সত্যের পরে আহ্বান করা যেতে পারে? (অর্থাত্ একটি অধিবেশন শেষে) বা আপনি যে সামগ্রীটি লগইন করতে চান তার আগে এটি চালিত হওয়া উচিত?
ভয়েসগুলি

@ tjt263 আপনি যে সামগ্রীগুলি সংরক্ষণ করতে চান তার আগে এটি আহ্বান করতে হবে ..
হিমাইল

4
অভিশাপ। এটা লজ্জার. আমি সাধারণত জানি না যে আমি এটি পরে চাই।
ভয়েসেস

@ tjt263 আপনি এটি আপনার .bashrc এর ভিতরে রাখতে এবং সবকিছুকে / tmp এ সংযুক্ত করতে পারেন।
phil294

1
এটি প্রত্যক্ষভাবে রফতানি করতে, টার্মিনাল মেনু -> শেল -> এখানে যেমন পাঠ্য রফতানি করে দেখুন: mactrickandtips.com/2013/04/save-teritions-text-output.html
ম্যাগনে

12

আমিও একই সমস্যার মুখোমুখি হয়েছিলাম এবং কিছু অনুসন্ধানের পরে এই সমাধানটি নিয়ে এলাম:

আপনার .bash_aliases এটি যুক্ত করুন:

# Execute "script" command just once
smart_script(){
    # if there's no SCRIPT_LOG_FILE exported yet
    if [ -z "$SCRIPT_LOG_FILE" ]; then
        # make folder paths
        logdirparent=~/Terminal_typescripts
        logdirraw=raw/$(date +%F)
        logdir=$logdirparent/$logdirraw
        logfile=$logdir/$(date +%F_%T).$$.rawlog

        # if no folder exist - make one
        if [ ! -d $logdir ]; then
            mkdir -p $logdir
        fi

        export SCRIPT_LOG_FILE=$logfile
        export SCRIPT_LOG_PARENT_FOLDER=$logdirparent

        # quiet output if no args are passed
        if [ ! -z "$1" ]; then
            script -f $logfile
        else
            script -f -q $logfile
        fi

        exit
    fi
}

# Start logging into new file
alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v'

# Manually saves current log file: $ savelog logname
savelog(){
    # make folder path
    manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual
    # if no folder exists - make one
    if [ ! -d $manualdir ]; then
        mkdir -p $manualdir
    fi
    # make log name
    logname=${SCRIPT_LOG_FILE##*/}
    logname=${logname%.*}
    # add user logname if passed as argument
    if [ ! -z $1 ]; then
        logname=$logname'_'$1
    fi
    # make filepaths
    txtfile=$manualdir/$logname'.txt'
    rawfile=$manualdir/$logname'.rawlog'
    # make .rawlog readable and save it to .txt file
    cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile
    # copy corresponding .rawfile
    cp $SCRIPT_LOG_FILE $rawfile
    printf 'Saved logs:\n    '$txtfile'\n    '$rawfile'\n'
}

এবং আপনার .bashrc ফাইলটির শেষে এটি যুক্ত করুন:

smart_script

আপনি এটি করার পরে, "স্ক্রিপ্ট" কমান্ড প্রতিটি টার্মিনাল সেশনে একবার কার্যকর করা হবে, সমস্ত কিছু '~ / টার্মিনাল_সামগ্রী / কাঁচা' এ লগইন করুন। যদি আপনি চান তবে 'সেভলগ' বা 'সেভলগ লগ-নেম' টাইপ করে সত্যের পরে (সেশন শেষে) বর্তমান সেশন লগটি সংরক্ষণ করতে পারেন - এটি বর্তমান কাঁচা লগটি 'Ter / টার্মিনাল_টাইপস স্ক্রিপ্টস / ম্যানুয়াল'-এ অনুলিপি করবে এবং পাঠযোগ্য .txt এই ফোল্ডারে লগ করুন। (যদি আপনি এটি করতে ভুলে যান তবে কাঁচা লগ ফাইলগুলি এখনও তাদের ফোল্ডারে থাকবে, আপনাকে কেবল তাদের সন্ধান করতে হবে)) এছাড়াও আপনি 'স্টার্টনিওলগ' টাইপ করে একটি নতুন লগ ফাইলে রেকর্ডিং শুরু করতে পারেন।

প্রচুর জাঙ্ক লগ ফাইল থাকবে তবে আপনি সময়ে সময়ে পুরানোগুলি সাফ করতে পারেন, তাই এটি কোনও বড় সমস্যা নয়।

( Https://answers.launchpad.net/ubuntu/+source/gnome-terminal/+question/7131 , https://askubuntu.com/a/493326/473790 এর উপর ভিত্তি করে )


লগিং শুরু করার পরে আপনার কেন 'প্রস্থান' কমান্ডের প্রয়োজন?
দানিজেল

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