কনসোলে টাইপ করা প্রতিটি কমান্ডের আগে "ক্লিয়ার" চালানোর জন্য আমি কি বাশকে কনফিগার করতে পারি?


22

আমি clearপ্রতিবার টার্মিনালে (আমার কমান্ড কার্যকর করার আগে) কিছু কমান্ড টাইপ করে কমান্ডটি কার্যকর করতে বাশকে কনফিগার করতে চাই । আমি এটা কিভাবে করবো?

আমি ডেবিয়ান লিনাক্স ব্যবহার করছি।


আপনি এই থ্রেড দরকারী মনে হয়।
থোর

3
শুধু কৌতূহলী: আপনি এর জন্য কী আবেদন করছেন? যখন আমি প্রচুর আউটপুট দিয়ে প্রোগ্রামগুলি ডিবাগ করি না, আমি সাধারণত আমি যে প্রসঙ্গে কাজ করছি সে সম্পর্কে নজর রাখতে আমাকে স্ক্রিনে যথাসম্ভব রাখতে চাই
জো

উত্তর:


22

বাশ একটি পূর্ববর্তী হুক আছে । প্রকার, রকম.

preexec () {
  clear
}
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return                     # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning
    preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG

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

@ জো Enterকমান্ডটি কার্যকর করার আগে আপনি চাপ দেওয়ার পরে এটি পর্দা সাফ করবে । এটা আমার জন্য এই মত কাজ করে। প্রতিটি ইন্টারেক্টিভ কমান্ডের জন্য প্রিক্সেক হুক কার্যকর করা হয়, কমান্ডটি অন্তর্নির্মিত বা বহিরাগত কমান্ড বা অনেকগুলি কমান্ডের বিষয়টি বিবেচনা করে না।
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
@ জো আপনাকে এই লাইনটি যুক্ত করতে হবে [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;সমস্যাটি সম্পূর্ণ না হলে কিছুই করবেন না যে PROMPT_COMMAND চলছে এবং প্রকৃত কমান্ডের পরেও আটকা পড়েছে; এছাড়াও কেউ আমাকে বলতে পারেন কেন local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;এখানে আছেন?
ম্যাগপ্রসপেরো

@ জেমসঅ্যান্ডিনো history -1সামনে কমান্ড লাইনটি মুদ্রণ করে, সামনে একটি ইতিহাস নম্বর থাকে। সেড ফিল্টার ইতিহাসের সংখ্যাটি সরিয়ে দেয়।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

@ জেমসঅ্যান্ডিনো এটি কার্যকর করেছে (এবং আমি দেখি গিলস এটি তার উত্তরে যুক্ত করেছে।)
জো

6
bind 'RETURN: "\e[1~clear; \e[4~\n"'

এর পরে প্রতিবার আপনি returnকেবল লেখার পরিবর্তে টিপুন \nএটি লাইনের শুরুতে চলে যাবে, পাঠ্যটি প্রবেশ করান clear;, তারপরে প্রান্তে চলে যাবে এবং \nপ্রত্যাশা অনুযায়ী প্রবেশ করবে।


2
একটি newline প্রম্পট, কোন পথে ছাপা হবে একই জিনিস প্রম্পট সঞ্চালিত স্পষ্ট নির্বাণ তাই ঘটায় ছাড়া কমান্ড ইতিহাস দূষণ clearকমান্ড।
jw013

2
@ jw013 পার্থক্যটি হ'ল clearকমান্ড এবং কমান্ড আউটপুট অদৃশ্য হওয়ার আগে আমার ক্ষেত্রে কার্যকর করা হয়। তবে প্রম্পট ক্ষেত্রে এটি না।
নলখাগড়া

আমি আশা করি কমান্ড লাইনটি নিজেই সংশোধন না করে এটি করার কোনও উপায় ছিল - আমি নিশ্চিত যে জটিল বা মাল্টি-লাইন কমান্ডগুলিতে আকর্ষণীয় উপায়ে এটি ভেঙে যাবে তবে আমি এটি করার আরও ভাল কোনও উপায় খুঁজে পাব না।
jw013

@ jw013, আপনি ঠিক বলেছেন, এটি বহু-লাইনের জন্য বিরতি দেয় .. এটি clear;প্রতিটি অতিরিক্ত জন্য আউটপুটে সন্নিবেশ করে \n
পিটার.ও

এই টিপটি খুব ভাল THX হয় !! আমার কিছু নির্দিষ্ট কোড এফ 2-তে আবদ্ধ করা দরকার, তবে কিছু সময় লাইনে কিছু টাইপ করা কমান্ড আমি টাইপ করি কিন্তু কার্যকর করি না, সুতরাং এই প্রাক্তনটির সাথে: bind "\"\\eOQ\":\"\e[1~ls;#\\n\""এটি শুরুতে চলে ls;#যাবে, সেখানে কী ছিল তা মন্তব্য করে টাইপ করুন , এবং lsসঠিকভাবে কমান্ডটি চালান ! ধন্যবাদ!
অ্যাকোরিয়াস পাওয়ার

2

আমি আজ জিজ্ঞাসা করা একটি প্রশ্ন থেকে (ব্যবহারকারী @ একোলির উত্তরের কৃতিত্ব সহ ):

bind '"\C-m": "\C-l\C-j"'

\C-m'Enter' কী simulating, \C-lsimulating Ctrl+lযেমন এটা পরিষ্কার এবং \C-jহয় "সম্পর্কে newline-এবং-ইন্ডেন্ট", তাই কমান্ড Ctrl + L & Ctrl + J থেকে এন্টার কী অবিচল

এটি GNU ব্যাশ, সংস্করণ 3.2.53 (1) -রেলেজে (x86_64-আপেল-ডারউইন 14) এবং এই থ্রেডের অন্যান্য উত্তরগুলিতে কাজ করে না। এছাড়াও, এটি প্রতিটি অন্যান্য কমান্ডকে 'পরিষ্কার' কমান্ড দিয়ে ইতিহাসকে দূষিত করে না।


1
দ্রষ্টব্য: ওভার ssh ব্যবহার করে, আপনাকে অবশ্যই সেই পরিবেশে এটি প্রয়োগ করতে হবে বা অদ্ভুততা ঘটবে।
টিআরবি

গ্রেট এটি আমার উবুন্টু 16.04 টার্মিনালে কাজ করে, ধন্যবাদ তবে এটি কীভাবে কাজ করে, আপনি কি কোনও লিঙ্ক বা কিছু ডকুমেন্টেশন সরবরাহ করতে পারেন?
আন্দ্রেজেজ রেহমান

0

আপনি যখন চান কেবল ক্লিয়ারিং বিবেচনা করুন

cb4() {
  preexec () {
    clear
  }
}

এটি ডাকা একটি হুক ব্যবহার করে preexec, নিশ্চিত zsh এর সাথেও কাজ করে

তারপরে আপনার চালিত প্রতিটি কমান্ডের আগে আপনি যে কোনও সেশনটি স্বয়ংক্রিয়ভাবে সাফ করতে চান: cb4

আপনি যদি নিশ্চিত হন তবে আপনি সর্বদা প্রতিটি প্রসঙ্গে সাফ করতে চান

preexec () {
  clear
}

এবং যদি আপনি প্রকৃতপক্ষে টার্মিনালটি পুনরায় সেট করতে চান

শব্দ প্রতিস্থাপন clearসঙ্গেtput reset

tput alচ্ছিক তবে পুনরায় সেট করার প্রক্রিয়াটি গতিময় করে

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