سؤال قم بتعيين عنوان النافذة الطرفية للدليل الحالي


كيف يمكنني الحصول على Terminal.app في OS X لعرض الدليل الحالي في عنوان النافذة أو علامة التبويب الخاصة به؟

أنا أستخدم shell bash.


68
2017-12-07 18:27


الأصل


أتساءل دائمًا لماذا لا يتذكر حتى الأشخاص الذين يجيبون على السؤال أن يصوتوا له. - cregox


الأجوبة:


يعتمد على صدفة الخاص بك.

هذه مقالة - سلعة يعرض طرق متعددة.

أنا شخصيا استخدام ZS التي لديها وظيفة precmd () مريحة والتي يتم تشغيلها قبل كل موجه.

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

على الرغم من أن الأسئلة الأخرى تدرج أساليب bash ، فهي اسم مستعار cd. يوفر Bash طريقة متأصلة تتغاضى عن المطالبة فقط.

سحق

تقدم bash متغيرًا PROMPT_COMMAND والذي يحتوي على أمر لتنفيذه قبل المطالبة. يقوم هذا المثال (المدرج في ~ / .bashrc) بتعيين العنوان إلى "username @ hostname: directory":

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

حيث \ 033 هو رمز الحرف ESC و \ 007 لـ BEL. لاحظ أن الاقتباس مهم هنا: يتم توسيع المتغيرات في "..." ، ولا يتم توسيعها في "...". لذا يتم تعيين PROMPT_COMMAND إلى قيمة غير موسعة ، ولكن يتم توسيع المتغيرات داخل "..." عند استخدام PROMPT_COMMAND.

ومع ذلك ، فإن الأشخاص ذوي الإعاقة ينتجون مسار الدليل الكامل. إذا أردنا استخدام الاختصار "~" ، نحتاج إلى تضمين سلسلة الهروب في الموجه ، مما يسمح لنا بالاستفادة من التوسعات الفورية التالية التي توفرها shell:

\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

وبالتالي ، ينتج ما يلي موجه "bash $" ، وعنوان xterm "username @ hostname: directory" ...

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

لاحظ استخدام [...] ، الذي يخبر bash بتجاهل أحرف التحكم غير القابلة للطباعة عند حساب عرض الموجه. وبخلاف ذلك يتم خلط أوامر تحرير السطر أثناء وضع المؤشر.


59
2017-12-07 19:01



يجب أن يكون ذكر أنني أستخدم باش ، لقد قمت بتحديث السؤال. - kareman
تمت إضافة طريقة bash من الرابط المدرج. - Darren Hall
جيد جدا. للحصول على المسار إلى الدليل الحالي في العنوان واسم الدليل الحالي في المطالبة ، استخدمت للتو PS1 = "\ [\ 033] 0 ؛ \ w \ 007 \] \ W \ $". - kareman
"إذا أردنا استخدام الاختصار" ~ "، نحتاج إلى تضمين سلسلة الهروب في المطالبة" يمكنك استخدام ما يلي لاستبدال مسار الدليل الرئيسي الكامل بـ التلدة: $ {PWD / # $ {HOME} / \ ~} - Chris Page
MattTagg بالتأكيد ، أنت فقط بحاجة إلى وضعها في الخاص بك ~/.profile (أو ما يعادل) ملف على الجهاز البعيد. - CoreDumpError


نسخ ولصق في ملف ~ / .profile:
PROMPT_COMMAND="echo -ne \"\033]0;${PWD##*/}\007\"; $PROMPT_COMMAND"

سيؤدي هذا إلى تعيين عنوان علامة التبويب الطرفية الحالية على اسم المجلد الموجود في (ليس المسار بالكامل).
وبالتالي...
Developer/Applications/Utilities/Bluetooth/ يصبح => Bluetooth


30
2018-03-12 08:22



على mavericks ، الملف المطلوب تعديله هو ~ / .bash_profile - Tom


بدءًا من نظام التشغيل Mac OS X Lion 10.7 ، لدى Terminal تسلسل هروب واضح لإعداد دليل العمل ، والذي يعرضه Terminal باستخدام رمز "proxy" القياسي في النافذة. يمكّنك هذا من الضغط على مفتاح Command-Click لمشاهدة المسار أو الكشف عنه في Finder أو سحبه مثل أي مجلد آخر. بالإضافة إلى ذلك ، يمكن لـ Terminal استخدام هذا لإنشاء محطة طرفية أخرى في نفس الدليل ، واستعادة دليل العمل عند الإقلاع / إعادة التشغيل الطرفية (عند تمكين استئناف). كما يتيح استعادة الدلائل لـ "مجموعات إطار".

إنه نفس تسلسل هروب أمر نظام التشغيل (OSC) بالنسبة لعنوان النافذة وعناوين التبويب ، ولكن مع تعيين المعلمة الأولى على 7. يجب أن تكون القيمة عنوان URL للملف: "file:" ، والذي يُمكِّن الأحرف الخاصة التي يتم ترميزها بنسبة مئوية بحيث يمكن التعامل معها جميع أسماء المسار الصحيحة. يجب عليك أيضًا تضمين اسم المضيف حتى تتمكن Terminal من تحديد ما إذا كان دليلًا محليًا أم لا ؛ سوف تجنب استخدام المحطة كدليل العمل الحالي إذا كان من مضيف مختلف.

في ملاحظة ذات صلة ، تدعم المحطة الطرفية بشكل مماثل إعداد "الملف الممثل" باستخدام تسلسل هروب OSC بمعلمة من 6. في حالة التعيين ، سيعرض رمز الوكيل هذا بدلاً من دليل العمل. على سبيل المثال ، لدي emacs وأقل تهيئًا لعكس الملف / المخزن المؤقت المعروض حاليًا في رمز الخادم الوكيل. وهذا يتيح لهذه البرامج المستندة إلى tty أن تكون أكثر تكاملاً مع نظام التشغيل المحيط.

يتم تمكين سلوكيات دليل العمل بشكل افتراضي للباش (shell الافتراضي على نظام التشغيل Mac OS X). انظر / etc / bashrc للشفرة ذات الصلة.

كما أنه من الجدير بالذكر أن Lion Terminal يدعم الآن تعيين عنوان علامة التبويب بشكل مستقل عن عنوان النافذة باستخدام تسلسل هروب OSC.


11
2017-08-11 06:50



ال update_terminal_cwd تقوم الوظيفة بضبط رمز البروكسي على دليل العمل الحالي. بشكل افتراضي $PROMPT_COMMAND هو update_terminal_cwd. - jtbandes
jtbandes هذا ما كنت أشير إليه عندما كتبت "يتم تمكين سلوكيات دليل العمل بشكل افتراضي لـ bash ...". - Chris Page
نعم. لقد اكتشفت للتو كيفية عملها واعتقدت أنها قد تكون مفيدة لموظفي Google في المستقبل! - jtbandes


بصرف النظر عن التوصية باستخدام تسلسل هروب أمر تشغيل نظام التشغيل الخاص بـ Apple Terminal: ESC ] Ps ; Pt BEL أين Ps هو 7 و Pt هو file: URL. تجدر الإشارة إلى وجود ملف في نظام التشغيل Mac OS X 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.

وإذا قمت بالتغيير 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

2
2018-05-05 17:13





تفشل حلول Bash التي تتضمن PS1 و PROMPT_COMMAND إذا كان الدليل يحتوي على أحرف Unicode فيه (على الأقل على Snow Leopard). أفضل حل يمكن أن أقوم به هو القيام بما يعادل

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

للأسف هذا لا يعمل بشكل مباشر ، لذلك بدلا من ذلك حددت وظيفة شل للقيام tr مكالمة:

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

هذا يعمل بشكل جيد لللهجات اللاتينية ، والتي ستكون في Unicode NFD (سوف تختفي النغمات لكن ستظل الشخصية اللاتينية الأساسية).

لسوء الحظ ، سوف تفشل تماما لأشياء مثل الصينية.


1
2017-07-30 02:07



بدءًا من نظام التشغيل Mac OS X Lion 10.7 ، لدى Terminal تسلسل هروب واضح لإعداد دليل العمل. ويستخدم عنوان URL ، بحيث يمكنك استخدام ترميز النسبة المئوية للأحرف الخاصة ودعم جميع أسماء المسار الصحيحة. انظر إجابتي على هذا السؤال للحصول على التفاصيل. - Chris Page


بافتراض أنك تستخدم محطة MAC الافتراضية ، يمكنك استخدام المحطة التالية في ملف .profile نظرًا لأن "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

1
2018-03-27 19:20





أدخل هذا في ملف ~ / .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.


0
2017-12-07 19:01



"يحتوي السطر الأول على حرفين خاصين لا يمكن نسخهما / لصقهما" بدلاً من استخدام echo استعمال printf، مما يتيح لك التعبير عن تلك الأحرف (ESC و BEL / Control-G) مع تسلسلات الهروب: printf '\e]0;$@\a" - Chris Page