OS X के टर्मिनल में update_terminal_cwd क्या करता है


21

मैं अब तक काफी कुछ इसके लिए हैरान हूँ। में $PROMPT_COMMANDओएस एक्स में पार्टी की, वहाँ नामक आदेश है update_terminal_cwd। मुझे यकीन है कि यह बिल्ट इन नहीं है, और सबसे अधिक संभावना केवल ओएस एक्स में मौजूद है। लेकिन मुझे नहीं पता कि यह वास्तव में क्या करता है। कोई जानता है?

जवाबों:


26

यह वर्तमान कार्य निर्देशिका (CWD) को प्रतिध्वनित करने के लिए संकेत को अद्यतन करता है और इसमें परिभाषित किया गया है /etc/bashrc:

update_terminal_cwd() {
    # Identify the directory using a "file:" scheme URL,
    # including the host name to disambiguate local vs.
    # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
}

यह ध्यान देने योग्य हो सकता है कि फ़ंक्शन केवल तभी परिभाषित किया जाता है जब आप ऐप्पल टर्मिनल ऐप में अपना शेल चला रहे हों। यदि आप iTerm का उपयोग कर रहे हैं, तो इसे परिभाषित नहीं किया जाएगा।
nwinkler

भागने के लिए 7 क्या बिल्ली है और यह कहां से छपता है? वह दस्तावेज कहां है? :)
वाइल्डकार्ड

1
@Wildcard xtermशीर्षक बार पाठ सेट करने के लिए यह एक नियंत्रण कोड है। सबसे सुलभ दस्तावेज शायद लिनक्स बैश प्रॉम्प्ट होटो हैxtermस्रोतों में वास्तविक प्रलेखन है , IIRC।
ट्रिपल जूल

2
यह फ़ंक्शन 9 की लाइन में सेट किया गया है /etc/bashrc_Apple_Terminal( यहां सीखी गई ट्रिक के माध्यम से पाया गया )। लेकिन मुझे लगता है कि एक स्क्रीन सत्र के अंदर $ PROMPT_COMMAND एक रिक्त स्ट्रिंग बन जाती है, जिसका अर्थ है /etc/bashrc_Apple_Terminalकि शायद अब निष्पादित नहीं किया गया है। तुम जानते हो क्यों?
जिक्सी

1
@zyxue यदि आप देखते हैं /etc/bashrc, तो यह $TERM_PROGRAMटर्मिनल को निर्धारित करने के लिए चर का उपयोग करता है और /etc/bashrc_$TERM_PROGRAMयदि मौजूद है तो उसे चलाता है। इसलिए स्क्रीन सत्र में, $TERM_PROGRAMशायद सेट नहीं किया गया है, या इसके अलावा किसी अन्य चीज़ पर सेट किया गया है Apple_Terminal
डेविड मोल्स

-15

ओपेक गुप्त एन्कोडेड प्रारूप स्ट्रिंग, '\ e] 7;% s \ a'। संदिग्ध।

local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"

मैं जो इकट्ठा करता हूं, उससे "फ़ाइल: // $ HOSTNAME" को बाहर निकाल दिया जाता है ताकि आप दूरस्थ प्रोटोकॉल नहीं देख सकें: होस्ट जासूसी।


1
... या $ HOSTNAME एक चर है जो उस सिस्टम के आधार पर बदलता है जिस पर स्क्रिप्ट चल रही है। ?!? पैरानॉयड ज्यादा? यदि आपको लगता है कि अन्य उत्तर में सूचीबद्ध कोड स्क्रीन पर प्रिंट के अलावा कुछ भी कर सकता है, तो आपको पता नहीं है कि बैश स्क्रिप्टिंग कैसे काम करती है।
ट्यूबडॉग

क्या आपको मेमो नहीं मिला? - "ShellShock" bash भेद्यता web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 किसी भी मामले में 1) अज्ञात उत्पत्ति जिसमें मैंने वह वातावरण चर 'update_terminal_cwd' 2) सेट किया है) उस के शीर्ष, यह एक समारोह है। स्वचालित रूप से संदिग्ध। बड़े पैमाने पर घुसपैठ। कोई नहीं चाहता कि। शायद NIST Apple OSX और ब्राउज़र फ़ायरफ़ॉक्स / क्रोम / ओपेरा "भेद्यता" की सूचना देगा?
user982671

7
आप यह प्रदर्शित करना जारी रखते हैं कि आपको कोई पता नहीं है कि आप किस बारे में बात कर रहे हैं। update_terminal_cwdपर्यावरण चर नहीं है, यह एक फ़ंक्शन का नाम है। इसे स्पष्ट पाठ में परिभाषित किया गया है /etc/bashrcऔर printfफ़ंक्शन में स्क्रीन पर मुद्रित स्वरूपित तारों के अलावा कुछ भी करने की क्षमता नहीं है। अंत में, आपके द्वारा पोस्ट की गई वल्कन लिंक में टेक्स्ट को एनवायरनमेंट वैरिएबल डेफिनिशन में एप्लाइड करके मनमाने कार्यों को अंजाम देना शामिल है ... जिसका यहां होने वाली किसी भी चीज से कोई लेना-देना नहीं है। और wtf ब्राउज़र को शेल स्क्रिप्टिंग के साथ क्या करना है?
ट्यूबडॉग

यह उस प्रश्न का उत्तर देने का प्रयास नहीं करता है जो पूछा गया था ( इस कथन को सही ठहराने के लिए विस्तृत विश्लेषण के लिए यहां देखें )। कृपया उस उत्तर के लिए उत्तर बॉक्स को आरक्षित करें जो उस प्रश्न का उत्तर देता है जो पूछा गया था। धन्यवाद!
डीडब्ल्यू

1
@tubedogg haha ​​हाँ, यदि आप ऐसा करते हैं, तो typeset -fयह सभी "उपयोगकर्ता परिभाषित" कार्यों को दिखाएगा और इस तरह यह पॉप अप हो जाएगा। अगर वे कुछ स्केच करने की कोशिश कर रहे थे, तो वे आसानी से दिखाई नहीं देंगे।
कोलोब कैन्यन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.