এক্সটার্ম টাইটেলবারে কমান্ড প্রদর্শন করুন


23

আমার বাশ প্রম্পট বর্তমানে নিম্নলিখিত ক্রমটি ব্যবহার করে এক্সটার্ম শিরোনামবারটি সেট করছে:

PS1='\033]0;\u@\h>\w\007'

শিরোনামবারে বর্তমান কমান্ডটি প্রদর্শনের জন্য কি সহজ উপায় আছে? উদাহরণস্বরূপ, আমি যদি কোনও ফাইল ব্যবহার করে টেলিং করছি তবে tail -f foo.logআমি চাই আমার শিরোনামবারটি tail -f foo.log

উত্তর:


16

মূলত, আপনার প্রয়োজন:

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}"' DEBUG

আপনার .bashrcবা অনুরূপ শেষে । এটি কাজ করতে আমাকে কিছুটা সময় নিয়েছে - আরও তথ্যের জন্য আমার উত্তর এখানে দেখুন :)


এই সমাধান সাইমন জন্য ধন্যবাদ! যাইহোক, .bashrcআমার শেলের প্রতিটি কমান্ডের পরে এটি যুক্ত করার পরে আমি এই আউটপুটটি পাই 0;%s@%s:%s" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}। আমি ধরে নিই যে ট্র্যাপ কমান্ডটি বরাদ্দ করে আমি এই আউটপুটটি দমন করতে পারি PS1? তবে, PS1=trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUGকাজ করে না। এটি ত্রুটি বাড়ে bash: echo -ne "\033]0;$BASH_COMMAND\007": command not found
orschiro

বিটিডাব্লু, আমি সবেমাত্র স্ট্যাকওভারফ্লো. com / জিজ্ঞাসা / 40৪৪০১71০০/২ ফিল্ড করেছি , সম্ভবত এই পরামর্শ প্রয়োগ হওয়ার ফলস্বরূপ জিজ্ঞাসা করেছি। ফাঁদটি স্ট্ডার বা সরাসরি টিটিওয়াইয়ের কাছে লিখতে হবে, স্টাডাউট নয়।
চার্লস ডাফি

1
@orschiro, trapকমান্ডটি পৃথক কমান্ড হিসাবে চালানোর পরামর্শ , পিএস 1 এ এটি বরাদ্দ না করা।
চার্লস ডাফি

12

( এই এসইউ উত্তরে অনুপ্রাণিত )

আপনি কয়েকটি জোড় বাশ কৌশল একত্রিত করতে পারেন:

  • আপনি যদি কোনও ডিইবিইউজি সিগন্যাল ফাঁদে ফেলেন তবে প্রতিটি কমান্ড কার্যকর হওয়ার আগে হ্যান্ডলারটি ডাকা হবে
  • ভেরিয়েবল $BASH_COMMANDবর্তমানে এক্সিকিউটিভ কমান্ড ধারণ করে

সুতরাং, DEBUG কে ফাঁদে ফেলুন এবং হ্যান্ডলারটি এতে শিরোনামটি সেট করুন $BASH_COMMAND:

trap 'printf "\033]0;%s\007" "${BASH_COMMAND//[^[:print:]]/}" >&2' DEBUG

এটি অন্য কোনও কিছু পরিবর্তন না হওয়া অবধি শিরোনামটি পরিবর্তিত রাখবে, তবে যতক্ষণ না আপনার $PS1অবস্থা একই থাকে ততক্ষণ কোনও সমস্যা হবে না - আপনি একটি কমান্ড শুরু করেন, ডিইবিইউজি হ্যান্ডলার শিরোনামবারটি পরিবর্তন করে এবং কমান্ড সমাপ্ত হলে নতুন একটি ছবি আঁকবে অনুরোধ জানানো হয় এবং আবার আপনার শিরোনাম বার পুনরায় সেট করুন।

এখানে একটি দরকারী টিপ পাওয়া গেল (এস ইউ উত্তরটি যেখান থেকে এসেছে) এর মধ্যে অন্তর্ভুক্ত রয়েছে:

set -o functrace

এটি আপনার শুরু হওয়া যে কোনও সাব-শেলগুলিতে ব্যাশটি DEBUG ট্র্যাপ প্রচার করবে; অন্যথায় তাদের মধ্যে শিরোনামবারটি পরিবর্তন করা হবে না


হা! ঠিক একই সময়ে একই উত্তর! সাবসেল পরিচালনা করার জন্য +1, তবে পাইপ সমস্যার কোনও উত্তর আছে কি? (এসও প্রশ্নের আমার লিঙ্কটি দেখুন)
সাইমন

এর মাধ্যমে কাজ করে নাssh
অতীতে 7

এছাড়াও "ট্যাব"
অতীতে 7

বিটিডাব্লু, আমি সবেমাত্র স্ট্যাকওভারফ্লো. com / জিজ্ঞাসা / 40৪৪০১71০০/২ ফিল্ড করেছি , সম্ভবত এই পরামর্শ প্রয়োগ হওয়ার ফলস্বরূপ জিজ্ঞাসা করেছি। ফাঁদটি স্ট্ডার বা সরাসরি টিটিওয়াইয়ের কাছে লিখতে হবে, স্টাডাউট নয়।
চার্লস ডাফি

/dev/ttyস্ট্যাডার পরিবর্তে পুনঃনির্দেশ করা ভাল না ?
অ্যারোন দিগুল্লা

2

আমি চারপাশে বিভিন্ন পোস্ট থেকে আমার নিজস্ব সমাধানটি নিয়ে কাজ করেছি। এটি ব্যবহারকারী, হোস্টনাম, পিডাব্লুডি, টিটি এবং বর্তমানে সম্পাদিত কমান্ড (ব্যাশের জন্য) সমন্বিত একটি শিরোনাম তৈরি করে।

এটি এর মতো দেখাচ্ছে (কোনও আদেশ কার্যকর করা হচ্ছে না):

.:[user@hostname:/home/user][pts/10]:.

এবং এটির মতো (একটি আদেশ কার্যকর করে):

.:[user@hostname:/home/user][pts/10] {tail -F /var/log/syslog}:.

কোথাও .বাশার্কে, আমি পিএস 1 বাড়িয়েছি:

# set the terminals title. This is the "post-command" part,
# need to use a trap for pre-command (to add the command line to the title)
PS1+="\[\033]2;.:[\u@\h:\$PWD] [$(tty | cut -b 6-)]:.\007\]"

ইতিহাস 1 এবং ট্র্যাপ ব্যবহার করে বর্তমান কমান্ড যুক্ত করুন :

# set a fancy title (this is pre-command, in PS1 is after-command (to reset command)
trap 'echo -ne "\033]2;.:[${USER}@${HOSTNAME}:${PWD}] [$(tty | cut -b 6-)] {$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//g")}:.\007"' DEBUG

আপনার প্রয়োজন হিসাবে নির্দ্বিধায়।


বিটিডাব্লু, আমি সবেমাত্র স্ট্যাকওভারফ্লো. com / জিজ্ঞাসা / 40৪৪০১71০০/২ ফিল্ড করেছি , সম্ভবত এই পরামর্শ প্রয়োগ হওয়ার ফলস্বরূপ জিজ্ঞাসা করেছি। ফাঁদটি স্ট্ডার বা সরাসরি টিটিওয়াইয়ের কাছে লিখতে হবে, স্টাডাউট নয়।
চার্লস ডাফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.