Apa yang dilakukan update_terminal_cwd di terminal OS X

21

Saya bingung dengan itu untuk beberapa saat sekarang. Di $PROMPT_COMMANDdalam bash di OS X, ada perintah yang disebut update_terminal_cwd. Saya yakin ini bukan bash bawaan, dan kemungkinan besar hanya ada di OS X. Tapi saya tidak tahu apa tepatnya itu. Ada yang tahu?

Chong
sumber

Jawaban:

26

Ini memperbarui permintaan untuk menggemakan Direktori Kerja Saat Ini (CWD) dan didefinisikan dalam /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"
}
Paul Gilfedder
sumber
Mungkin perlu dicatat bahwa fungsi ini hanya ditentukan jika Anda menjalankan shell di aplikasi Apple Terminal. Jika Anda menggunakan iTerm, itu tidak akan ditentukan.
nwinkler
Untuk apa jalan keluar-7 dan ke mana ia mencetak? Di mana itu didokumentasikan? :)
Wildcard
1
@ Kartu Memori Ini adalah xtermkode kontrol untuk mengatur teks judul bar. Dokumentasi yang paling mudah diakses mungkin adalah Linux Bash Prompt Howto . Ada dokumentasi nyata di xtermsumbernya, IIRC.
tripleee
2
Fungsi ini diatur pada baris 9 dari /etc/bashrc_Apple_Terminal(ditemukan melalui trik yang dipelajari di sini ). Tetapi saya menemukan bahwa di dalam sesi layar, $ PROMPT_COMMAND menjadi string kosong, yang berarti /etc/bashrc_Apple_Terminalmungkin tidak dieksekusi lagi. Apa kamu tahu kenapa?
zyxue
1
@zyxue jika Anda melihatnya /etc/bashrc, ia menggunakan variabel $TERM_PROGRAMuntuk menentukan terminal dan menjalankan yang sesuai /etc/bashrc_$TERM_PROGRAMjika ada. Jadi dalam sesi layar, $TERM_PROGRAMmungkin tidak diatur, atau diatur ke sesuatu selain Apple_Terminal.
David Moles
-15

String format disandikan rahasia buram, '\ e] 7;% s \ a'. Tersangka.

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

Dari apa yang saya kumpulkan, "file: // $ HOSTNAME" disembunyikan sehingga Anda tidak dapat melihat protokol jarak jauh: host spionage.

pengguna982671
sumber
1
... atau $ HOSTNAME adalah variabel yang berubah tergantung pada sistem yang dijalankan skrip. ?!? Paranoid banyak? Jika Anda berpikir kode yang tercantum dalam jawaban lain dapat melakukan apa pun selain mencetak ke layar, Anda tidak tahu bagaimana bash scripting bekerja.
tubedogg
Apakah Anda tidak mendapatkan memo itu? - "ShellShock" bash kerentanan web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 Dalam hal apa pun 1) Asal tidak diketahui di mana saya tidak menetapkan variabel lingkungan 'update_terminal_cwd' 2) Aktif Selain itu, itu adalah fungsi. Secara otomatis dicurigai. Infiltrasi massal. Tidak ada yang menginginkan itu. Mungkin NIST akan melaporkan Apple OSX dan peramban Firefox / Chrome / Opera "kerentanan"?
user982671
7
Anda terus menunjukkan bahwa Anda tidak tahu apa yang Anda bicarakan. update_terminal_cwdbukan variabel lingkungan, itu adalah nama fungsi. Ini didefinisikan dalam teks yang jelas di /etc/bashrcdan printffungsi tidak memiliki kemampuan untuk melakukan apa pun kecuali mencetak string yang diformat ke layar. Akhirnya, tautan vuln yang Anda posting melibatkan menjalankan fungsi arbitrer dengan menambahkan teks ke definisi variabel lingkungan ... yang tidak ada hubungannya dengan apa pun yang sedang dibahas di sini. Dan apa hubungannya browser dengan shell scripting?
tubedogg
Ini tidak berusaha menjawab pertanyaan yang diajukan (lihat di sini untuk analisis terperinci untuk membenarkan pernyataan ini). Harap simpan kotak jawaban untuk jawaban yang menjawab pertanyaan yang diajukan. Terima kasih!
DW
1
@ tubedogg haha ​​ya, jika Anda hanya melakukan typeset -fitu akan menampilkan semua fungsi "yang ditentukan pengguna" dan itulah bagaimana ini muncul. Jika mereka mencoba melakukan sesuatu yang samar, mereka tidak akan membuat ini mudah terlihat.
Ngarai Kolob