Update_terminal_cwd làm gì trong thiết bị đầu cuối của OS X


21

Bây giờ tôi rất bối rối vì điều đó. Trong $PROMPT_COMMANDbash trong OS X, có một lệnh được gọi update_terminal_cwd. Tôi chắc chắn đó không phải là một bash tích hợp và rất có thể chỉ tồn tại trong OS X. Nhưng tôi không biết chính xác nó làm gì. Có ai biết?

Câu trả lời:


26

Nó cập nhật lời nhắc để lặp lại Thư mục làm việc hiện tại (CWD) và được định nghĩa trong /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"
}

Có thể đáng lưu ý rằng chức năng chỉ được xác định nếu bạn đang chạy trình bao của mình trong ứng dụng Apple Terminal. Nếu bạn đang sử dụng iTerm, nó sẽ không được xác định.
nwinkler

Cái thoát là gì 7 và nó được in ở đâu? Tài liệu đó ở đâu? :)
tự đại diện

1
@Wildcard Đó là xtermmã kiểm soát để đặt văn bản thanh tiêu đề. Tài liệu dễ tiếp cận nhất có lẽ là Linux Bash Prompt Howto . Có tài liệu thực sự trong các xtermnguồn, IIRC.
tripleee 7/07/2016

2
Hàm này được đặt trong dòng 9 của /etc/bashrc_Apple_Terminal(được tìm thấy thông qua một mẹo học được ở đây ). Nhưng tôi thấy rằng trong một phiên màn hình, $ PROMPT_COMMAND trở thành một chuỗi trống, có nghĩa /etc/bashrc_Apple_Terminallà có thể không được thực thi nữa. Bạn có biết tại sao?
zyxue

1
@zyxue nếu bạn nhìn vào /etc/bashrc, nó sử dụng biến $TERM_PROGRAMđể xác định thiết bị đầu cuối và chạy tương ứng /etc/bashrc_$TERM_PROGRAMnếu nó tồn tại. Vì vậy, trong phiên màn hình, $TERM_PROGRAMcó thể không được đặt hoặc được đặt thành một cái gì đó khác Apple_Terminal.
David Moles

-15

Chuỗi định dạng được mã hóa bí mật mờ, '\ e] 7;% s \ a'. Nghi ngờ.

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

Từ những gì tôi thu thập được, "tệp: // $ HOSTNAME" được che dấu để bạn không thể thấy giao thức từ xa: gián điệp máy chủ.


1
... hoặc $ HOSTNAME là một biến thay đổi tùy theo hệ thống mà tập lệnh đang chạy. ?!? Bệnh hoang tưởng nhiều? Nếu bạn nghĩ rằng mã được liệt kê trong câu trả lời khác có thể làm bất cứ điều gì ngoài việc in ra màn hình, bạn không biết bash scripting hoạt động như thế nào.
tubedogg

Bạn không nhận được bản ghi nhớ à? - "ShellShock" bash lỗ hổng web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 Trong mọi trường hợp 1) Không rõ nguồn gốc mà tôi không đặt biến môi trường đó 'update_terminal_cwd' 2 Trên hết, đó là một chức năng. Tự động nghi ngờ. Xâm nhập hàng loạt. Không ai muốn điều đó. Có lẽ NIST sẽ báo cáo "lỗ hổng" của Apple OSX và trình duyệt Firefox / Chrome / Opera?
dùng982671

7
Bạn tiếp tục chứng tỏ bạn không biết bạn đang nói về cái gì. update_terminal_cwdkhông phải là một biến môi trường, nó là tên của một hàm. Nó được định nghĩa trong văn bản rõ ràng /etc/bashrcprintfchức năng không có khả năng làm bất cứ điều gì ngoại trừ in các chuỗi được định dạng lên màn hình. Cuối cùng, liên kết thô tục mà bạn đã đăng liên quan đến việc thực thi các hàm tùy ý bằng cách nối thêm văn bản vào định nghĩa biến môi trường ... không liên quan gì đến bất cứ điều gì đang được thảo luận ở đây. Và các trình duyệt có phải làm với shell scripting không?
tubedogg

Điều này không cố gắng trả lời câu hỏi đã được hỏi (xem ở đây để phân tích chi tiết để biện minh cho tuyên bố này). Vui lòng đặt hộp trả lời cho câu trả lời trả lời câu hỏi đã được hỏi. Cảm ơn bạn!
DW

1
@tubedogg haha ​​vâng, nếu bạn chỉ cần thực hiện, typeset -fnó sẽ hiển thị tất cả các chức năng "do người dùng xác định" và đó là cách nó xuất hiện. Nếu họ đang cố gắng làm một cái gì đó sơ sài, họ sẽ không làm cho điều này dễ dàng nhìn thấy.
Hẻm núi Kolob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.