जवाबों:
अपने खोल पर निर्भर करता है।
यह लेख कई तरीकों को प्रदर्शित करता है।
मैं व्यक्तिगत रूप से zsh का उपयोग करता हूं जिसमें एक सुविधाजनक प्रीमॉड () फ़ंक्शन है जो प्रत्येक प्रॉम्प्ट से पहले चलाया जाता है।
precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt
यद्यपि अन्य प्रश्न बाश विधियों को सूचीबद्ध करते हैं, वे उर्फ सीडी। बैश एक अंतर्निहित विधि प्रदान करता है जो सिर्फ संकेत देता है।
दे घुमा के
बैश एक चर PROMPT_COMMAND की आपूर्ति करता है जिसमें प्रॉम्प्ट से पहले निष्पादित करने के लिए एक कमांड होता है। यह उदाहरण (~ / .bashrc में डाला गया) "उपयोगकर्ता नाम @ होस्टनाम: निर्देशिका" शीर्षक सेट करता है।
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
जहाँ ESC के लिए \ 033 चरित्र कोड है, और BEL के लिए \ _7। ध्यान दें कि यहां उद्धरण महत्वपूर्ण है: चर "..." में विस्तारित हैं, और '...' में विस्तारित नहीं हैं। इसलिए PROMPT_COMMAND को एक अनएक्सपैंडेड वैल्यू पर सेट किया गया है, लेकिन PROMPT_COMMAND का उपयोग किए जाने पर "..." के अंदर चर का विस्तार किया जाता है।
हालाँकि, PWD पूर्ण निर्देशिका पथ का निर्माण करता है। यदि हम '~' शॉर्टहैंड का उपयोग करना चाहते हैं, तो हमें प्रॉम्प्ट में एस्केप स्ट्रिंग को एम्बेड करना होगा, जो हमें शेल द्वारा प्रदान किए गए निम्नलिखित त्वरित विस्तार का लाभ उठाने की अनुमति देता है:
\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
इस प्रकार, निम्नलिखित "बैश $" का संकेत देता है, और "उपयोगकर्ता नाम @ होस्टनाम: निर्देशिका" का एक xterm शीर्षक ...
case $TERM in
xterm*)
PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
;;
*)
PS1="bash\$ "
;;
esac
[...] के उपयोग पर ध्यान दें, जो प्रॉम्प्ट की चौड़ाई की गणना करते समय गैर-मुद्रण नियंत्रण वर्णों को अनदेखा करने के लिए बैश बताता है। अन्यथा लाइन एडिटिंग कमांड कर्सर रखते समय भ्रमित हो जाते हैं।
~/.profile
दूरस्थ मशीन पर अपनी (या समतुल्य) फ़ाइल में डालने की आवश्यकता है ।
फ़ाइल में कॉपी और पेस्ट ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"
यह वर्तमान टर्मिनल टैब का शीर्षक उस फ़ोल्डर के नाम पर सेट करेगा, जिसमें आप हैं (संपूर्ण पथ नहीं)।
तो ...
Developer/Applications/Utilities/Bluetooth/
=> बन जाता हैBluetooth
मैक ओएस एक्स लायन 10.7 के रूप में, टर्मिनल में वर्किंग डायरेक्टरी को सेट करने के लिए एक स्पष्ट एस्केप सीक्वेंस है, जो टर्मिनल मानक विंडो "प्रॉक्सी" आइकन का उपयोग करके प्रदर्शित करता है। यह आपको मार्ग देखने, खोजक में प्रकट करने, या किसी अन्य फ़ोल्डर की तरह खींचने के लिए कमांड-क्लिक करने में सक्षम करता है। इसके अलावा, टर्मिनल एक ही निर्देशिका में एक और टर्मिनल बनाने के लिए इसका उपयोग कर सकता है, और टर्मिनल को फिर से शुरू / पुनरारंभ करने (जब रिज्यूमे सक्षम होता है) को काम करने वाली निर्देशिका को पुनर्स्थापित करने के लिए। यह विंडो समूहों के लिए निर्देशिकाओं को पुनर्स्थापित करने में भी सक्षम बनाता है।
यह एक ही ऑपरेटिंग सिस्टम कमांड (OSC) विंडो और टैब टाइटल के लिए एस्केप सीक्वेंस है, लेकिन पहले पैरामीटर के साथ 7 पर सेट किया गया है। वैल्यू में "फाइल:" URL होना चाहिए, जो प्रतिशत-एन्कोडिंग विशेष वर्णों को सक्षम करता है ताकि यह हैंडल हो सके सभी वैध मार्ग। आपको होस्टनाम भी शामिल करना चाहिए ताकि टर्मिनल यह निर्धारित कर सके कि क्या यह एक स्थानीय निर्देशिका है; यदि यह किसी भिन्न होस्ट से है, तो टर्मिनल इसे वर्तमान कार्य निर्देशिका के रूप में उपयोग करने से बचाएगा।
संबंधित नोट पर, टर्मिनल समान रूप से 6. के एक पैरामीटर के साथ OSC एस्केप अनुक्रम का उपयोग करके "प्रतिनिधित्व फ़ाइल" सेट करने का समर्थन करता है। यदि सेट किया गया है, तो प्रॉक्सी आइकन कार्यशील निर्देशिका के बजाय इसे प्रदर्शित करेगा। उदाहरण के लिए, मेरे पास प्रॉक्सी आइकन में वर्तमान में प्रदर्शित फ़ाइल / बफर को प्रतिबिंबित करने के लिए ईमैक्स और कम कॉन्फ़िगर है। यह इन tty- आधारित कार्यक्रमों को आसपास के OS के साथ अधिक एकीकृत करने में सक्षम बनाता है।
कार्य निर्देशिका व्यवहार को डिफ़ॉल्ट रूप से bash (Mac OS X पर डिफ़ॉल्ट शेल) के लिए सक्षम किया जाता है। संबंधित कोड के लिए / etc / bashrc देखें।
यह शायद यह भी ध्यान देने योग्य है कि लायन टर्मिनल अब ओएससी एस्केप अनुक्रम का उपयोग करके विंडो शीर्षक से स्वतंत्र रूप से टैब शीर्षक स्थापित करने का समर्थन करता है।
update_terminal_cwd
समारोह वर्तमान कार्यशील निर्देशिका करने के लिए प्रॉक्सी आइकन सेट हो जाएगा। डिफ़ॉल्ट रूप से $PROMPT_COMMAND
है update_terminal_cwd
।
इसके अलावा सिफारिश करने से आप एप्पल टर्मिनल विशिष्ट ऑपरेटिंग सिस्टम कमान एस्केप अनुक्रम का उपयोग करें: 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 को bash में फाइल 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 और PROMPT_COMMAND से जुड़े बैश समाधान दोनों विफल हो जाते हैं, तो निर्देशिका में यूनिकोड वर्ण हैं (कम से कम हिम तेंदुए पर)। सबसे अच्छा समाधान मैं कर सकता था के बराबर करने के लिए
PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "
दुर्भाग्य से यह सीधे काम नहीं करता है, इसलिए मैंने tr
कॉल करने के लिए शेल फ़ंक्शन को परिभाषित किया :
termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "
यह लैटिन उच्चारणों के लिए अच्छी तरह से काम करता है, जो यूनिकोड एनएफडी में होगा (उच्चारण गायब हो जाएगा लेकिन अंतर्निहित लैटिन चरित्र रहेगा)।
दुर्भाग्य से, यह चीनी जैसी चीजों के लिए पूरी तरह से विफल हो जाएगा।
मान लें कि आप डिफ़ॉल्ट मैक टर्मिनल का उपयोग कर रहे हैं, तो आप निम्नलिखित में से एक का उपयोग कर सकते हैं। जब से आप एक नया टैब खोलते हैं, तो "set_prompt" अपने आप को रूट फ़ोल्डर में भेज सकता है:
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
इसे अपनी ~ / .profile या समकक्ष फ़ाइल में दर्ज करें:
function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }
export PS1='\W \$ '
settitle `pwd`
पहली पंक्ति में दो विशेष वर्ण हैं जिन्हें कॉपी / पेस्ट नहीं किया जा सकता है, लेकिन आप यहां से पाठ डाउनलोड कर सकते हैं: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh ।
echo
करने के बजाय printf
, जो आपको भागने के दृश्यों के साथ उन पात्रों (ईएससी और बीईएल / कंट्रोल-जी) को व्यक्त करने की अनुमति देता है:printf '\e]0;$@\a"