এটি, কয়েক মাস আগে আমার ব্লগে পোস্ট করা থেকে, আমি এমন একটি ধারণা হতে চলেছি যা আমি ভেবেছিলাম যে সাম্প্রতিক স্মৃতিতে আমি সবচেয়ে ভাল ছোট্ট হ্যাকের সাথে শান্ত হয়েছি। আমি এখানে পুরো উদ্ধৃত:
==================
আমি বাশ অনেক সময় ব্যয়। অবিচ্ছিন্নতার জন্য, বাশ এমন একটি সিস্টেম যা আপনি বেশিরভাগ ইউনিক্স মেশিনে এবং কৃতজ্ঞতার সাথে কিছু উইন্ডো এবং প্রতিটি ম্যাক খুঁজে পেয়ে যাবেন। প্রথম ব্লাশে, এটি কমান্ড-লাইন ইন্টারফেসের চেয়ে বেশি কিছু নয় এবং তাই বেশিরভাগ ব্যবহারকারীর রাডার বন্ধ রয়েছে যারা এ্যানাক্রোনিজম হিসাবে এমন জিনিসগুলি দেখে তারা বরং ভুলে যেতে চাইবে।
আমি বাশ প্রায় সবকিছু। আমি একটি কম্যান্ড লাইন থেকে আমার ইমেলটি পড়ি, এ কারণেই আমি চিহ্নিত ইমেলটি এচু করছি। আমি ডিরেক্টরিতে নেভিগেট করি, ফাইলগুলি সম্পাদনা করি, আমার প্রতিদিনের উত্স কোড চেকআউট এবং বিতরণে নিযুক্ত করি, ফাইলগুলি অনুসন্ধান করি, ফাইলগুলির ভিতরে অনুসন্ধান করি, আমার মেশিনটি পুনরায় বুট করি এবং এমনকি মাঝে মাঝে কমান্ড লাইন থেকে ওয়েব পৃষ্ঠাও ব্রাউজ করি। বাশ আমার ডিজিটাল অস্তিত্বের হৃদয় এবং প্রাণ and
সমস্যাটি হ'ল আমার একবারে প্রায় 6 টি বাশ উইন্ডো খোলা থাকে। আজ কাজের সময়ে, আমার একটি ওয়েব সার্ভার চালাচ্ছিল, আমার ডাটাবেসের সাথে আরেকটি হুড়োহুড়ি, একটি তৃতীয়, চতুর্থ এবং পঞ্চমটি বিভিন্ন ফাইল সম্পাদনা করছে, যখন ষষ্ঠটি আমার মেশিনে কম্পিউটারের প্রতিটি ফাইলের নাম রেকর্ড করার চেষ্টা করছে। কেন? কারণ আপনি যদি ফাইলনাম দ্বারা কোনও অবজেক্টটি সন্ধান করতে চান তবে যদি এই জাতীয় সংরক্ষণাগারটি অনুসন্ধান করতে সক্ষম হয় তবে তা সহজেই কার্যকর।
আপনি যখন এটি করেন, আপনি নিজের কন্ট্রোল বারে প্রচুর উইন্ডো দিয়ে শেষ করেন, কেবল "ব্যাশ" named আপনার যদি কেবল তার মধ্যে একটি থাকে তবে এটি ঠিক আছে, তবে আপনার যখন 6 বা ততোধিক .... এবং আরও দুটি ডজন কাজ চলছে তখন এর যন্ত্রণা। একটি কীবোর্ড / মাউস জোড়ার যুগপত কমান্ডের অধীনে আমার কাছে তিনটি মনিটর রয়েছে এবং আমি এখনও আরও বেশি প্রয়োজন বলে অনুভব করি। এই উইন্ডোগুলির প্রতিটিটিতে বেশ কয়েকটি ব্যাশ টার্মিনাল খোলা রয়েছে।
সুতরাং আমি এটিকে একসাথে ডুবিয়েছি। প্রথমে আপনার .বাশ_ প্রোফাইলে এই লাইনগুলি রাখুন:
export PROMPT_COMMAND='export TRIM=`~/bin/trim.pl`'
export PS1="\[\e]0;\$TRIM\a\]\$TRIM> "
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
আমি কীভাবে এই সমস্ত কাজ করে এবং ঠিক কেন এটি সেট আপ করা হয় সে সম্পর্কে কয়েক ডজন অনুচ্ছেদ লিখেছি, তবে আপনি সত্যিই আগ্রহী নন। আমাকে বিশ্বাস কর. ...
সেই তৃতীয় লাইনে কেন আমি "সিএমডি = ; প্রতিধ্বনি ..." করেছি তার একটি বইয়ের পুরো অধ্যায় রয়েছে । অনেক লোক (ব্লুহোস্ট সহ, যেখানে আমার অন্যান্য ডোমেনটি হোস্ট করা আছে) এখনও ব্যাশ ব্যবহার করছে এবং এটি কীভাবে ফাঁদগুলিকে পরিচালনা করে তার মধ্যে বড় বাগগুলি সহ বাশনের পুরানো সংস্করণ রয়েছে, সুতরাং আমরা এটির সাথে আটকে আছি। আপনি সিএমডি অপসারণ করতে পারেন এবং এটিকে প্রতিস্থাপন করতে পারেন যদি আপনি আপনার ব্যাশ সংস্করণে বর্তমান থাকেন এবং গবেষণাটি করার মতো মনে করেন $ BASH_COMMAND।
যাইহোক, আমি ব্যবহৃত প্রথম স্ক্রিপ্টটি এখানে। এটি একটি দুর্দান্ত প্রম্পট তৈরি করে যা আপনার মেশিনের নাম এবং ডিরেক্টরিকে যুক্তিসঙ্গত দৈর্ঘ্যে কাটা হয়েছে:
============trim.pl===========
#!/usr/bin/perl
#It seems that my cygwin box doesn't have HOSTNAME available in the
#environment - at least not to scripts - so I'm getting it elsewhere.
open (IN, "/usr/bin/hostname|");
$hostname = <IN>;
close (IN);
$hostname =~ /^([A-Za-z0-9-]*)/;
$host_short = $1;
$preamble = "..." if (length($ENV{"PWD"})>37);
$ENV{"PWD"} =~ /(.{1,37}$)/;
$path_short = $1;
print "$host_short: $preamble$path_short";
==============================
এই ব্লগ পোস্টের শীর্ষে একটি সতর্কতা রয়েছে যা মূid় প্রশ্ন জিজ্ঞাসা করা শুরু করার আগে আপনার এখনই পড়া উচিত, "আপনি কেবলমাত্র ইউএনএইভিটির মাধ্যমে HOSTNAME এনভায়রনমেন্ট ভেরিয়েবলটি ব্যবহার করেন নি কেন?" সাধারণ: কারণ এটি যে সমস্ত সিস্টেমে আমি চেষ্টা করেছি সেগুলির জন্য এটি কাজ করে না।
এখন সত্যিই দুর্দান্ত বিট জন্য। .Bash_profile সংযোজনের 3 লাইনটি মনে রাখবেন?
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
এটি পূর্বের মতো একই পাত্রে ট্রিম.পিএল স্ক্রিপ্ট আউটপুটটি ডাম্প করছে, কমান্ড প্রম্পট এবং উইন্ডো শিরোনাম উভয়কেই মুদ্রণ করছে, কিন্তু এবার এটি সবেমাত্র টাইপ করা কমান্ডটি যুক্ত করছে! এই কারণেই আপনি নিজের .bashrc- এ এই সমস্ত কিছু করতে চান না: আপনি যে কোনও স্ক্রিপ্ট চালাবেন (আমার মেশিনে, মানুষ তাদের মধ্যে একজন) প্রতিটি লাইনে এই জিনিসটিকে ট্রিগার করবে। আমরা এখানে যা করছি তা দেখে মানুষের আউটপুট সিরিয়াসভাবে ডুবে যায়। আমরা টার্মিনালের সাথে ঠিক খেলছি না।
আপনি সুনির্দিষ্ট টাইপ করা কমান্ডটি ধরতে আমরা ব্যাশের ইতিহাস নিই এবং এটি কিছুটা পাতলা করে নিই:
===========hist.pl============
#!/usr/bin/perl
while (<STDIN>)
{
$line = $_
}
chomp $line;
$line =~ /^.{27}(.*)/;
print $1;
==============================
সুতরাং এখন, আমার কাছে একটি বাজিলিয়ন উইন্ডোজ চলছে এবং তারা এগুলি বলে:
castro: /home/ronb blog
Ron-D630: /C/ronb/rails/depot script/server
Ron-D630: /C/ronb/rails/depot mysql -u ron -p
Ron-D630: /C/ronb/rails/depot find . > /C/ronb/system.map
Ron-D630: /C/ronb/rails/depot vi app/views/cart.html.erb
Ron-D630: /C/perforce/depot/ p4 protect
Ron-D630: /C/perforce/depot/ p4 sync -f
Ron-D630: /C/perforce/depot/
পর্দার নীচে খুশি লিটল বার থেকে, আমি এখন বলতে পারি কোনটি এক মুহুর্তের নজরে। এবং কারণ আমরা পিএস 1 সেট করেছি, কমান্ডের এক্সিকিউটিং শেষ হওয়ার সাথে সাথে কমান্ডের নামটি আবার ট্রিম.পিএল এর আউটপুট দ্বারা প্রতিস্থাপিত হয়।
আপডেট (একই দিন): আমি যখন আমার .bashrc এ চেষ্টা করেছি তখন এই জিনিসগুলি (.bash_profile এন্ট্রি) আমার উপর সমস্ত ধরণের নরক রাখে। আপনি যখন কোনও ভাষা হিসাবে বাশকে ডাকেন তখন আপনার .bashrc অ-ইন্টারেক্টিভ স্ক্রিপ্টগুলি দ্বারা কার্যকর করা হয়। আমি যখন মানুষ ব্যবহার করার চেষ্টা করছিলাম তখন আমি এটিকে আঘাত করেছি। ম্যান পৃষ্ঠার শীর্ষে সমস্ত ধরণের আবর্জনা (আমার .bashrc এর সম্পূর্ণ পাঠ্য, এবং এর থেকে অব্যাহতি পাঠকদের) দেখানো হয়েছে। আপনি একবারে সবগুলি একসাথে পেয়ে গেলে কমান্ড লাইনে একটি দ্রুত 'ম্যান ম্যান' অনুরোধের সাথে এই রত্নটি পরীক্ষা করার পরামর্শ দেব।
আমি অনুমান করি এখন আমার সময়টি আমার .bashrc থেকে কাস্টম আবর্জনা টেনে বের করে এটি যেখানে রাখবে ...
প্রকৃতপক্ষে, আমি নিজেকে এই প্রক্রিয়াটির এক পর্যায়ে 'ম্যান ট্র্যাপ' টাইপ করতে দেখলাম found