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


71

উইন্ডো বা ট্যাব শিরোনামে বর্তমান ডিরেক্টরিটি প্রদর্শন করতে আমি কীভাবে ওএস এক্স-এ টার্মিনাল.এপ পেতে পারি?

আমি ব্যাশ শেল ব্যবহার করছি।


আমি সবসময় ভাবছি যে প্রশ্নের উত্তর দেওয়া লোকেরা কেন এটি ভোটাভুটির কথা মনে রাখে না।
ক্রেগোক্স

উত্তর:


60

আপনার শেল উপর নির্ভর করে।

এই নিবন্ধটি একাধিক পদ্ধতি প্রদর্শন করে।

আমি ব্যক্তিগতভাবে zsh ব্যবহার করি যা প্রতিটি প্রম্পটের আগে চালিত একটি সুবিধাজনক প্রাকমডি () ফাংশন রয়েছে।

    precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt

যদিও অন্যান্য প্রশ্নগুলি বাশ পদ্ধতিগুলি তালিকাবদ্ধ করে, তারা সিডির উপাধি দেয়। বাশ একটি অন্তর্নিহিত পদ্ধতি সরবরাহ করে যা কেবলমাত্র প্রম্পটটিকে বন্ধ করে দেয়।

সজোরে আঘাত

বাশ একটি পরিবর্তনশীল PROMPT_COMMAND সরবরাহ করে যা প্রম্পটের আগে সম্পাদন করার জন্য একটি কমান্ড ধারণ করে। এই উদাহরণ (~ / .bashrc sertedোকানো) শিরোনামটি "ব্যবহারকারীর নাম @ হোস্টনাম: ডিরেক্টরি" তে সেট করে:

 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

যেখানে S 033 হ'ল ESC এর অক্ষর কোড এবং BEL এর জন্য 7 007। এখানে উল্লেখ্য যে উদ্ধৃতিটি গুরুত্বপূর্ণ: ভেরিয়েবলগুলি "..." তে প্রসারিত হয় এবং '...' তে প্রসারিত হয় না। সুতরাং PROMPT_COMMAND অপরিবর্তিত মান হিসাবে সেট করা আছে, তবে PROMPT_COMMAND ব্যবহার করা হলে "..." এর ভিতরে ভেরিয়েবলগুলি প্রসারিত হয়।

তবে পিডব্লিউডি সম্পূর্ণ ডিরেক্টরি পাথ উত্পাদন করে। আমরা যদি '~' শর্টহ্যান্ড ব্যবহার করতে চাইলে আমাদের প্রম্পটে এস্কেপ স্ট্রিং এম্বেড করা দরকার যা শেল দ্বারা প্রদত্ত নিম্নলিখিত প্রম্পট বিস্তারের সুযোগ নিতে আমাদের সহায়তা করে:

\u          expands to $USERNAME
\h          expands to hostname up to first '.'
\w          expands to directory, replacing $HOME with '~'
\[...\]     embeds a sequence of non-printing characters

সুতরাং, নিম্নলিখিতটি "বাশ $" এর একটি প্রম্পট এবং "ইউজারনেম @ হোস্টনাম: ডিরেক্টরি" এর একটি এক্সটার্ম শিরোনাম উত্পাদন করে ...

 case $TERM in
     xterm*)
        PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
        ;;
     *)
        PS1="bash\$ "
        ;;
 esac

[...] এর ব্যবহারটি নোট করুন, যা প্রম্পটের প্রস্থের দৈর্ঘ্য গণনা করার সময় প্রিন্টিং নিয়ন্ত্রণের অক্ষরগুলিকে উপেক্ষা করতে বাশকে বলে tells অন্যথায় লাইন সম্পাদনা কমান্ডগুলি কার্সার রাখার সময় বিভ্রান্ত হয়।


আমি ব্যাশ ব্যবহার করছি উল্লেখ করা উচিত ছিল, আমি প্রশ্ন আপডেট করেছি।
কারেমন

তালিকাভুক্ত লিঙ্ক থেকে বাশ পদ্ধতি যুক্ত করা হয়েছে।
ডারেন হল

1
খুব ভালো. শিরোনামে বর্তমান ডিরেক্টরিটি এবং প্রম্পটে বর্তমান ডিরেক্টরিটির নাম পেতে কেবল আমি PS1 = "\ [\ 033] 0;; w \ 007 \] \ W \ $" ব্যবহার করেছি।
কারেমন

1
"যদি আমরা '~' শর্টহ্যান্ড ব্যবহার করতে চাইলে আমাদের প্রম্পটে এস্কেপ স্ট্রিং এম্বেড করা দরকার" আপনি টিলডের সাথে পূর্ণ হোম ডিরেক্টরি পথের নামটি প্রতিস্থাপন করতে নিম্নলিখিতটি ব্যবহার করতে পারেন: W W PWD / # $ OME হোম {/ \ ~}
ক্রিস পৃষ্ঠা

1
@ ম্যাটটাগ অবশ্যই, আপনাকে কেবল ~/.profileএটি দূরবর্তী মেশিনে আপনার (বা সমমানের) ফাইলে রাখতে হবে।
coredumperror

31

ফাইলটিতে অনুলিপি করুন এবং আটকান:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"

এটি আপনার যে ফোল্ডারে (পুরো পাথ নয়) এর নামে বর্তমান টার্মিনাল ট্যাবটির শিরোনাম সেট করবে।
সুতরাং ...
Developer/Applications/Utilities/Bluetooth/হয়ে যায়>Bluetooth


3
ম্যাভারিক্সে সম্পাদনা করার জন্য ফাইলটি হ'ল ~ / .bash_profile
টম

11

ম্যাক ওএস এক্স লায়ন 10.7 হিসাবে, টার্মিনালটিতে ওয়ার্কিং ডিরেক্টরি সেট করার জন্য স্পষ্টভাবে পালানোর ক্রম রয়েছে, যা টার্মিনাল স্ট্যান্ডার্ড উইন্ডো "প্রক্সি" আইকনটি ব্যবহার করে প্রদর্শন করে। এটি আপনাকে পথটি দেখতে, ফাইন্ডারে প্রকাশ করতে বা অন্য কোনও ফোল্ডারের মতো এটিকে টেনে আনতে কমান্ড-ক্লিক করতে সক্ষম করে। এছাড়াও, টার্মিনাল এটি একই ডিরেক্টরিতে অন্য একটি টার্মিনাল তৈরি করতে এবং টার্মিনালটি পুনরায় চালু / পুনঃসূচনা করার সময় (যখন পুনরায় চালু করা সক্ষম হয়) কাজ করার ডিরেক্টরিটি পুনরুদ্ধার করতে এটি ব্যবহার করতে পারে। এটি উইন্ডো গ্রুপগুলির জন্য ডিরেক্টরিগুলি পুনরুদ্ধার সক্ষম করে।

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

সম্পর্কিত নোটে, টার্মিনাল একইভাবে represented এর পরামিতি সহ ওএসসি এস্কেপ ক্রমটি ব্যবহার করে "উপস্থাপিত ফাইল" সেট করা সমর্থন করে set উদাহরণস্বরূপ, প্রক্সি আইকনে বর্তমানে প্রদর্শিত ফাইল / বাফার প্রতিফলিত করার জন্য আমার কাছে ইমাস এবং কম কনফিগার করা আছে। এটি এই টিটিটি-ভিত্তিক প্রোগ্রামগুলিকে পার্শ্ববর্তী ওএসের সাথে আরও সংহত করতে সক্ষম করে।

ওয়ার্কিং ডিরেক্টরি আচরণগুলি ব্যাশের জন্য ডিফল্টরূপে সক্ষম করা হয় (ম্যাক ওএস এক্সে ডিফল্ট শেল)। সম্পর্কিত কোডের জন্য / ইত্যাদি / বাশার্ক দেখুন rc

এটি সম্ভবত উল্লেখ করার মতো যে লায়ন টার্মিনাল এখন ওএসসি এস্কেপ ক্রমটি ব্যবহার করে উইন্ডো শিরোনাম থেকে স্বতন্ত্রভাবে ট্যাব শিরোনাম নির্ধারণকে সমর্থন করে।


update_terminal_cwdফাংশন সাম্প্রতিক কাজ করা প্রক্সি আইকন সেট হবে। ডিফল্টরূপে $PROMPT_COMMANDহয় update_terminal_cwd
jtbandes

@ জেটব্যান্ডেস যখন আমি লিখেছিলাম তখন আমি সেই বিষয়টি উল্লেখ করছিলাম "কার্য ডিরেক্টরি ডিরেক্টরি আচরণের জন্য ডিফল্টরূপে সক্ষম করা হয় ..."।
ক্রিস পৃষ্ঠা

হাঁ। আমি কেবল এটি কীভাবে কাজ করে তা আবিষ্কার করেছি এবং ভেবেছিলাম এটি ভবিষ্যতের গুগলারের পক্ষে কার্যকর হতে পারে!
jtbandes

3

আপনি অ্যাপল টার্মিনাল নির্দিষ্ট অপারেটিং সিস্টেম কমান্ড এস্কেপ সিকোয়েন্স ব্যবহার করার পরামর্শ দেওয়ার পাশাপাশি: ESC ] Ps ; Pt BELকোথায় Psআছেন 7এবং Ptএটি একটি file:ইউআরএল; এটি ম্যাক ওএস এক্স 10.11 (এবং সম্ভবত 10.7 সাল থেকে) যুক্ত করার মতো বিষয় রয়েছে যা একটি ফাইল /etc/bashrc_Apple_Terminal(10.11 এর অধীনে অযোগ্য) রয়েছে যা সুবিধাজনক update_terminal_cwd()হিসাবে (মন্তব্য ছাড়াই ) সংজ্ঞায়িত করেছে :

update_terminal_cwd () 
{ 
    local url_path='';
    { 
        local i ch hexch LC_CTYPE=C LC_ALL=;
        for ((i = 0; i < ${#PWD}; ++i))
        do
            ch="${PWD:i:1}";
            if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
                url_path+="$ch";
            else
                printf -v hexch "%02X" "'$ch";
                url_path+="%${hexch: -2:2}";
            fi;
        done
    };
    printf '\e]7;%s\a' "file://$HOSTNAME$url_path"
}

আপনি এটি আপনার রিমোট বাক্সগুলিতেও ব্যবহার করতে পারেন, আপনি যদি এমনটি করার কথা ভাবছিলেন এবং তারপরে ব্যাশ-এ ফাইলের URL টি সঠিকভাবে এনকোড করার জন্য আপনার মাথা আঁচড়ান।

এবং যদি আপনি PROMPT_COMMANDনিজের পরিবর্তিত হন .bash_profileবা .bashrcআপনি এটি কল করতে ভুলে যেতে পারেন। একই ফাইলটিতে তারা এটিকে আরও ভালভাবে শৃঙ্খলিত করার উদাহরণ দেখায়:

PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"

ব্যক্তিগতভাবে আমার মধ্যে .bash_profileআমি গিট প্রম্পটটি যুক্ত করতে চেয়েছিলাম তাই আমি এটি করেছি:

local git_path=/Applications/Xcode.app/Contents/Developer/usr/share/git-core
for f in $git_path/git-completion.bash $git_path/git-prompt.sh
do
  if [[ -f "$f" ]]; then
    . "$f"
  fi
done
get_sha() {
    git rev-parse --short HEAD 2>/dev/null
}
if [ "function" = $(type -t __git_ps1) ]; then
    export GIT_PS1_SHOWDIRTYSTATE=1
    GIT_PS1_SHOWSTASHSTATE=1
    GIT_PS1_SHOWUNTRACKEDFILES=1
    GIT_PS1_SHOWCOLORHINTS=1
    GIT_PS1_DESCRIBE_STYLE="branch"
    GIT_PS1_SHOWUPSTREAM="auto git"
    export PROMPT_COMMAND="$PROMPT_COMMAND${PROMPT_COMMAND:+; }"'__git_ps1 "\[\e[0;32m\]\u\[\e[1;32m\]@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]" "\$ " "\n{%s $(get_sha)}"'
fi

1

ডিরেক্টরিতে যদি ইউনিকোড অক্ষর থাকে (কমপক্ষে তুষার চিতাবাঘে) PS1 এবং PROMPT_COMMAND জড়িত বাশ সমাধানগুলি ব্যর্থ হয়। আমি যে সর্বোত্তম সমাধানটি নিয়ে আসতে পারি তা হ'ল এর সমতুল্য করা

PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "

দুর্ভাগ্যক্রমে এটি সরাসরি কাজ করে না, সুতরাং পরিবর্তে আমি trকলটি করতে শেল ফাংশনটি সংজ্ঞায়িত করেছি :

termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "

এটি লাতিন উচ্চারণগুলির জন্য ভাল কাজ করে যা ইউনিকোড এনএফডিতে থাকবে (অ্যাকসেন্টগুলি অদৃশ্য হয়ে যাবে তবে অন্তর্নিহিত ল্যাটিন চরিত্রটি থাকবে)।

দুর্ভাগ্যক্রমে, এটি চাইনিজদের মতো জিনিসগুলির জন্য পুরোপুরি ব্যর্থ হবে।


ম্যাক ওএস এক্স লায়ন 10.7 হিসাবে, টার্মিনালটিতে ওয়ার্কিং ডিরেক্টরি সেট করার জন্য স্পষ্টভাবে পালানোর ক্রম রয়েছে। এটি একটি ইউআরএল ব্যবহার করে, যাতে আপনি বিশেষ অক্ষরগুলির জন্য শতাংশ-এনকোডিং ব্যবহার করতে পারেন এবং সমস্ত বৈধ পথের নাম সমর্থন করতে পারেন। বিশদ জন্য এই প্রশ্নের আমার উত্তর দেখুন।
ক্রিস পৃষ্ঠা

1

ধরে নিই যে আপনি ডিফল্ট ম্যাক টার্মিনালটি ব্যবহার করছেন, আপনি যখনই একটি নতুন ট্যাব খুলবেন তখন নিজে থেকেই "সেট_প্রম্পট" আপনাকে মূল ফোল্ডারে প্রেরণ করতে পারে কারণ আপনি নীচের একটিটি ব্যবহার করতে পারেন pr

set_prompt () {
    BASE_PATH="${PWD##*/}"
    echo -ne "\033]0;$BASE_PATH\007"
}
set_my_tab () {
   update_terminal_cwd
   set_prompt
}

PROMPT_COMMAND=set_my_tab

0

আপনার ~ /। প্রোফাইল বা সমতুল্য ফাইলটিতে এটি প্রবেশ করুন:

function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }

export PS1='\W \$ '

settitle `pwd`

প্রথম লাইনে দুটি বিশেষ অক্ষর রয়েছে যা অনুলিপি / আটকানো যায় না, তবে আপনি এখানে থেকে পাঠ্যটি ডাউনলোড করতে পারেন: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh


1
"প্রথম লাইনে দুটি বিশেষ অক্ষর রয়েছে যা অনুলিপি / আটকানো যায় না" echoব্যবহারের পরিবর্তে printf, যা আপনাকে এই অক্ষরগুলি (এসএসসি এবং বিইএল / কন্ট্রোল-জি) অব্যাহতিক্রমের সাথে প্রকাশ করতে দেয়:printf '\e]0;$@\a"
ক্রিস পৃষ্ঠা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.