Dlaczego ikona folderu w moim terminalu ma na sobie znak zapytania?

16

Od czasu do czasu zauważam, że ikona folderu na pasku tytułowym jednego z okien mojego terminalu ma na sobie znak zapytania, np. Ten:

wprowadź opis zdjęcia tutaj

Co to znaczy? Wydaje się, że nie ma żadnego efektu ani problemów, które zauważyłem - jestem po prostu ciekawy.

Używam OS X 10.8 (Mountain Lion).

Andrew Ferrier
źródło

Odpowiedzi:

18

Znak zapytania (i wyłączone elementy menu podręcznego) wskazuje, że Terminal myśli, że katalog roboczy znajduje się na komputerze zdalnym, a zatem nie można do niego nawigować w Finderze za pomocą menu podręcznego. Jeśli spojrzysz na ostatni element w wyskakującym menu (kliknij klawisz „Command” na ikonie „proxy”), zobaczysz komputer / host, na którym Terminal myśli, że katalog roboczy jest włączony. Powinieneś stwierdzić, że nie jest to bieżąca nazwa komputera.

Jeśli używasz bash (domyślna powłoka w systemie macOS), domyślnie wysyła sekwencję kontrolną do terminala przy każdym pytaniu, aby poinformować terminal o bieżącym katalogu roboczym. Ponieważ sekwencje kontrolne mogą pochodzić z komputerów lokalnych lub zdalnych, wysyła adres URL schematu „file:” zawierający nazwę hosta, a Terminal sprawdza, czy nazwa mapuje na bieżącą maszynę. Jeśli nie, Terminal wyłącza elementy menu podręcznego ścieżki, ponieważ nie odpowiadają one lokalnym katalogom.

Możesz zobaczyć kod, który wysyła sekwencję kontrolną w /etc/bashrc_Apple_Terminal(lub /etc/bashrcw starszych wersjach macOS).

[Pamiętaj, że jeśli nie używasz bash lub dostosowałeś go tak, aby domyślne zachowanie się nie pojawiało, ale twoja powłoka (lub inny uruchomiony program) wysyła sekwencje kontrolne w celu ustawienia okna lub karty ( ikona), Terminal zbada go, aby sprawdzić, czy zawiera coś, co wygląda jak nazwa ścieżki, a następnie sprawdzi, czy odpowiada to poprawnej lokalnej nazwie ścieżki. Jeśli nie, nie wyświetla w ogóle ikony proxy okna.]

Scenariusz, w którym terminal może nie rozpoznać, że adres URL „file:” znajduje się na bieżącym hoście, polega na zmianie konfiguracji sieci podczas działania powłoki. Częstym przypadkiem jest uśpienie komputera przenośnego i przeniesienie go w inne miejsce, a następnie wybudzenie go. Nazwa lokalnego hosta i adres ulegną zmianie, ale $HOSTNAMEzmienna środowiskowa powłoki wciąż ma starą nazwę hosta i to właśnie wysyła w sekwencji kontrolnej. Aby to naprawić, zaktualizuj zmienną środowiskową za pomocą:

 HOSTNAME=$(hostname)

Innym scenariuszem jest wyjście z terminalu, zmiana konfiguracji sieci, a następnie otwarcie terminalu z włączoną funkcją Wznów. Terminal przywróci okna i karty wraz z ostatnim adresem URL katalogu roboczego, który został wysłany. Jeśli napotkasz ten przypadek, $HOSTNAMEbędzie aktualny - ponieważ uruchamia nową powłokę - ale Terminal może nadal mieć nieaktualny adres URL, dopóki powłoka nie zaktualizuje go ponownie. Jeśli wyświetlenie wiersza polecenia nie rozwiąże problemu, spróbuj zmienić katalogi za pomocą, cdaby powłoka go zaktualizowała.

Chris Page
źródło