update_terminal_cwd ทำอะไรในเทอร์มินัลของ OS X


21

ตอนนี้ฉันงงแล้ว ใน$PROMPT_COMMANDการทุบตีใน OS X update_terminal_cwdที่มีคำสั่งที่เรียกว่า ฉันแน่ใจว่าไม่ใช่ทุบตีในตัวและมีแนวโน้มมากที่สุดใน OS X เท่านั้น แต่ฉันไม่รู้ว่ามันทำอะไร ใครรู้หรือไม่

คำตอบ:


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"
}

อาจเป็นเรื่องน่าสังเกตว่าฟังก์ชั่นนั้นถูกกำหนดไว้เฉพาะเมื่อคุณใช้งานเชลล์ในแอพ Apple Terminal หากคุณใช้ iTerm จะไม่ถูกกำหนด
nwinkler

ห่าอะไรคือ escape-7 และมันจะพิมพ์ไปที่ใด? เอกสารนั้นอยู่ที่ไหน :)
สัญลักษณ์แทน

1
@ Wildcard มันเป็นxtermรหัสควบคุมเพื่อตั้งค่าข้อความแถบชื่อเรื่อง เอกสารเข้าถึงได้มากที่สุดอาจจะเป็นลินุกซ์ทุบตี Howto มีเอกสารจริงในxtermแหล่งข้อมูล IIRC
tripleee

2
ฟังก์ชั่นนี้ตั้งอยู่ในบรรทัดที่ 9 ของ/etc/bashrc_Apple_Terminal(พบได้จากกลลวงที่ได้เรียนรู้ที่นี่ ) แต่ฉันพบว่าในเซสชันของหน้าจอ $ PROMPT_COMMAND จะกลายเป็นสตริงว่างซึ่งหมายความว่า/etc/bashrc_Apple_Terminalอาจไม่ถูกดำเนินการอีกต่อไป คุณรู้ไหมว่าทำไม?
zyxue

1
@zyxue ถ้าคุณดู/etc/bashrcมันจะใช้ตัวแปร$TERM_PROGRAMเพื่อพิจารณาเทอร์มินัลและเรียกใช้ที่สอดคล้องกัน/etc/bashrc_$TERM_PROGRAMหากมีอยู่ ดังนั้นในเซสชั่นหน้าจออาจจะไม่ได้ถูกกำหนดหรือมีการตั้งค่าอย่างอื่นที่ไม่ใช่$TERM_PROGRAM Apple_Terminal
David Moles

-15

สตริงรูปแบบที่เข้ารหัสลับทึบแสง '\ e] 7;% s \ a' สงสัย.

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

จากสิ่งที่ฉันรวบรวม "file: // $ HOSTNAME" ถูกปิดบังดังนั้นคุณจะไม่เห็นโปรโตคอลระยะไกล: host espionage


1
... หรือ $ HOSTNAME เป็นตัวแปรที่เปลี่ยนแปลงขึ้นอยู่กับระบบที่สคริปต์กำลังทำงานอยู่ ?!? หวาดระแวงมาก? หากคุณคิดว่ารหัสที่แสดงในคำตอบอื่น ๆ สามารถทำสิ่งอื่นนอกเหนือจากการพิมพ์ไปที่หน้าจอคุณไม่มีความคิดว่า bash scripting ทำงานอย่างไร
tubedogg

คุณไม่ได้รับบันทึกหรือไม่ - "ShellShock" ทุบตีช่องโหว่ web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 ในกรณีใด ๆ 1) ต้นกำเนิดที่ไม่รู้จักซึ่งฉันไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม 'update_terminal_cwd' 2) มันเป็นฟังก์ชั่น สงสัยโดยอัตโนมัติ การแทรกซึมของมวล ไม่มีใครต้องการสิ่งนั้น NIST อาจรายงานว่า "ช่องโหว่" ของ Apple OSX และเบราว์เซอร์ Firefox / Chrome / Opera
user982671

7
คุณยังคงแสดงให้เห็นว่าคุณไม่รู้ว่าคุณกำลังพูดถึงอะไร update_terminal_cwdไม่ใช่ตัวแปรสภาพแวดล้อมมันเป็นชื่อของฟังก์ชั่น มันถูกกำหนดไว้ในข้อความที่ชัดเจนใน/etc/bashrcและprintfฟังก์ชั่นไม่ได้มีความสามารถในการทำอะไรยกเว้นสตริงที่จัดรูปแบบการพิมพ์ไปที่หน้าจอ ท้ายที่สุดลิงก์ vuln ที่คุณโพสต์นั้นเกี่ยวข้องกับการใช้งานฟังก์ชั่นตามอำเภอใจโดยต่อท้ายข้อความลงในนิยามตัวแปรสภาพแวดล้อม ... ซึ่งไม่มีส่วนเกี่ยวข้องกับสิ่งใด ๆ เบราว์เซอร์จะทำอะไรกับสคริปต์เชลล์ได้หรือไม่
tubedogg

สิ่งนี้ไม่ได้พยายามตอบคำถามที่ถูกถาม (ดูที่นี่สำหรับการวิเคราะห์โดยละเอียดเพื่อแสดงความเหมาะสมกับข้อความนี้) กรุณาจองกล่องคำตอบสำหรับคำตอบที่ตอบคำถามที่ถูกถาม ขอขอบคุณ!
DW

1
@tubedogg ฮ่า ๆ ใช่ถ้าคุณเพิ่งทำtypeset -fมันจะแสดงฟังก์ชั่น "ผู้ใช้กำหนด" ทั้งหมดและนั่นคือสิ่งที่เกิดขึ้น หากพวกเขากำลังพยายามทำบางสิ่งที่ไม่สมบูรณ์พวกเขาจะไม่สามารถมองเห็นสิ่งนี้ได้อย่างง่ายดาย
Kolob Canyon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.