Update_terminal_cwd, OS X terminalinde ne yapar?


21

Uzunca bir süre şaşkınım. In $PROMPT_COMMANDOS X'de Bash adlı bir komut yoktur update_terminal_cwd. Eminim yerleşik bir bash değildir ve büyük olasılıkla sadece OS X'te vardır. Ama tam olarak ne yaptığını bilmiyorum. Kimse biliyor mu?

Yanıtlar:


26

Geçerli Çalışma Dizini'ni (CWD) yankılama istemini güncelleştirir ve şu şekilde tanımlanır /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"
}

İşlevin yalnızca kabuğunuzu Apple Terminal uygulamasında çalıştırıyorsanız tanımlandığını belirtmek gerekebilir. İTerm kullanıyorsanız, tanımlanmayacaktır.
nwinkler

Escape-7 ne işe yarıyor ve nereye yazdırılıyor? Nerede belgeleniyor? :)
Wildcard

1
@Wildcard xtermBaşlık çubuğu metnini ayarlamak için bir kontrol kodudur. En erişilebilir belgeler belki de Linux Bash Prompt Howto'dur . xtermKaynaklarda gerçek belgeler var , IIRC.
tripleee

2
Bu işlev 9 satırında ayarlanır /etc/bashrc_Apple_Terminal( burada öğrenilen bir numara ile bulunur ). Ama ben bir ekran oturumu içinde, $ PROMPT_COMMAND boş bir dize haline, yani /etc/bashrc_Apple_Terminalmuhtemelen artık yürütülmediğini bulmak. Neden biliyor musun?
Ocak'ta zyxue

1
@zyxue bakarsanız , terminali belirlemek ve varsa bir karşılık gelen değeri çalıştırmak /etc/bashrciçin değişkeni kullanır . Yani ekran oturumunda, muhtemelen ayarlanmamış veya başka bir şeye ayarlanmış . $TERM_PROGRAM/etc/bashrc_$TERM_PROGRAM$TERM_PROGRAMApple_Terminal
David Moles

-15

Opak gizli kodlanmış biçim dizesi, '\ e] 7;% s \ a'. Şüpheli.

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

Topladığım şeyden, "file: // $ HOSTNAME" maskeleniyor, böylece uzak protokolü göremiyorsunuz: host casusluk.


1
... veya $ HOSTNAME, komut dosyasının üzerinde çalıştığı sisteme bağlı olarak değişen bir değişkendir. ?!? Çok paranoyak mı? Diğer yanıtta listelenen kodun ekrana yazdırmaktan başka bir şey yapabileceğini düşünüyorsanız, bash komut dosyasının nasıl çalıştığı hakkında hiçbir fikriniz yoktur.
tubedogg

Notu alamadınız mı? - "ShellShock" bash güvenlik açığı web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271 Her durumda 1) Bu ortam değişkenini 'update_terminal_cwd' ayarlamamış olduğu bilinmeyen kaynak 2) Açık Üstelik bu bir işlev. Otomatik olarak şüphelenir. Toplu sızma. Kimse bunu istemiyor. Belki NIST, Apple OSX'i ve tarayıcı Firefox / Chrome / Opera "güvenlik açıklarını" rapor edecek?
user982671 29:14

7
Neden bahsettiğiniz hakkında hiçbir fikriniz olmadığını göstermeye devam ediyorsunuz. update_terminal_cwdbir ortam değişkeni değil, bir işlevin adıdır. Düz metin olarak tanımlanır /etc/bashrcve printfişlev, ekrana biçimlendirilmiş dizeleri basmak dışında hiçbir şey yapamaz. Son olarak, gönderdiğiniz güvenlik bağlantısı, burada tartışılan herhangi bir şeyle ilgisi olmayan bir ortam değişkeni tanımına metin ekleyerek rastgele işlevlerin yürütülmesini içerir. Ve tarayıcıların kabuk komut dosyası ile ne ilgisi var?
tubedogg

Bu, sorulan soruya cevap vermeye çalışmaz ( bu ifadeyi haklı çıkarmak için ayrıntılı analiz için buraya bakın ). Lütfen cevaplanan soruyu cevaplayan cevaplar için cevap kutusunu ayırın. Teşekkür ederim!
DW

1
@tubedogg haha ​​evet, eğer sadece bir typeset -f"kullanıcı tanımlı" tüm fonksiyonları gösterecek ve bu böyle ortaya çıktı. Eğer kabataslak bir şey yapmaya çalışıyorlarsa, bunu kolayca görünür kılmazlardı.
Kolob Kanyonu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.