Wyszukiwanie w witrynie

Zmień katalog i wyświetl pliki w jednej komendzie w powłoce Fish


Jeśli często korzystasz z wiersza poleceń w systemie Linux, prawdopodobnie marzyłeś o szybszym sposobie nawigacji po katalogach i przeglądania ich zawartości.

Zazwyczaj wiąże się to z uruchomieniem cd w celu zmiany katalogów, a następnie ls w celu wyświetlenia plików. Chociaż połączenie tych poleceń w jedno wydaje się być fajnym pomysłem, może to powodować problemy w przypadku pracy z katalogami zawierającymi wiele plików.

W tym przewodniku pokażemy, jak bezpiecznie łączyć cd i ls w Fish Shell za pomocą polecenia timeout. Umożliwia to szybkie zmienianie katalogów i wyświetlanie plików w jednym poleceniu, zapewniając jednocześnie, że Twój shell pozostaje responsywny, nawet w katalogach zawierających dużą liczbę plików.

Dlaczego łączyć cd i ls?

Domyślnie, gdy używasz cd do zmiany katalogów, Fish (lub inna powłoka) nie wyświetla plików w nowej lokalizacji. Uruchamianie ls osobno za każdym razem może być powtarzalne. Połączenie tych poleceń ułatwia zobaczenie zawartości katalogu bez dodatkowych kroków.

Jednak jest haczyk: wypisanie zawartości katalogu zawierającego miliony plików może spowodować, że Twoja powłoka zawiesi się, zużywając nadmierne zasoby i czyniąc terminal nieodpowiadającym.

Nie martw się! W następnych krokach przedstawimy wszystkie możliwe sposoby łączenia poleceń cd i ls.

Metoda 1: Jednorazowe użycie polecenia

Jeśli musisz to zrobić tylko raz, możesz użyć następującego polecenia:

cd /path/to/directory; and ls

Zastąp /path/to/directory folderem, który chcesz otworzyć. and zapewnia, że ls uruchomi się tylko wtedy, gdy cd zakończy się sukcesem.

Problem z automatycznym wyświetlaniem zawartości katalogu

Automatyczne uruchamianie ls po każdym cd może prowadzić do:

  1. Problemy z wydajnością: Wyświetlanie milionów plików może zająć dużo czasu i zużywać dużo CPU oraz pamięci.
  2. Nieodpowiadająca powłoka: Twój terminal może się zawiesić podczas próby wyświetlenia listy plików.
  3. Niepotrzebny wyjście: Czasami nie musisz od razu widzieć zawartości katalogu po przejściu do niego.

Aby uniknąć tych problemów, potrzebujemy mądrzejszego sposobu na połączenie cd i ls.

Metoda 2: Utwórz niestandardową funkcję Fish z timeout

Polecenie timeout pozwala uruchomić polecenie z ograniczeniem czasowym. Jeśli polecenie nie zakończy się w określonym czasie, zostanie zakończone. Jest to idealne do zapobiegania zawieszaniu się ls w katalogach zbyt dużą liczbą plików.

Oto jak utworzyć funkcję w powłoce Fish, która bezpiecznie łączy cd i ls przy użyciu timeout.

Krok 1: Utwórz funkcję

Otwórz swój plik konfiguracyjny Fish shell (~/.config/fish/config.fish) w edytorze tekstu:

nano ~/.config/fish/config.fish

Dodaj następującą funkcję:

function cdls
    # Change to the specified directory
    builtin cd $argv[1]
    and begin
        # List directory contents with a timeout of 1 second
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

Oto rozbicie powyższej funkcji.

  1. builtin cd $argv[1]: Zmienia na określony katalog.
  2. and begin ... end: Zapewnia, że następujące polecenia zostaną wykonane tylko wtedy, gdy cd zakończy się powodzeniem.
  3. timeout 1s ls -l: Uruchamia ls -l z limitem czasu 1 sekundy. Jeśli ls zajmie więcej niż 1 sekundę, zostaje zakończony.
  4. echo "Changed to directory: $PWD": Wyświetla ścieżkę bieżącego katalogu dla jasności.

Możesz również użyć tej kompaktowej funkcji:

function cdls
    cd $argv; and timeout 1s ls -l
end

Po prostu użyj dowolnej z powyższych funkcji. Obie wykonują to samo zadanie. Jeśli chcesz użyć obu funkcji, po prostu nadaj każdej unikalną nazwę.

Krok 2: Zapisz i załaduj ponownie konfigurację

Zapisz plik i ponownie załaduj konfigurację powłoki Fish, aby zastosować zmiany:

source ~/.config/fish/config.fish

Krok 3: Użyj polecenia cdls

Teraz możesz użyć polecenia cdls, aby bezpiecznie zmieniać katalogi i wyświetlać ich zawartość:

cdls /path/to/directory

Przykład:

cdls enlightenment/sources/e26/

Jeśli katalog zawiera łatwą do zarządzania liczbę plików, ls -l zakończy się w ciągu 1 sekundy i zobaczysz listę. Jeśli katalog jest zbyt duży, timeout zakończy działanie polecenia ls po 1 sekundzie, zapobiegając zawieszeniu się powłoki.

Przykładowy wynik:

Changed to directory: /home/ostechnix/enlightenment/sources/e26
total 56
drwxrwxr-x  7 ostechnix ostechnix 4096 Jan 17 19:13 ecrire
drwxrwxr-x 11 ostechnix ostechnix 4096 Jan 17 19:13 edi
drwxrwxr-x 18 ostechnix ostechnix 4096 Jan 17 19:02 efl
drwxrwxr-x 12 ostechnix ostechnix 4096 Jan 17 19:14 eflete
drwxrwxr-x 11 ostechnix ostechnix 4096 Jan 17 19:10 enlightenment
drwxrwxr-x  8 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-forecasts
drwxrwxr-x  8 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-penguins
drwxrwxr-x  7 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-places
drwxrwxr-x  7 ostechnix ostechnix 4096 Jan 17 19:14 entice
drwxrwxr-x  9 ostechnix ostechnix 4096 Jan 17 19:13 enventor
drwxrwxr-x  7 ostechnix ostechnix 4096 Jan 17 19:12 ephoto
drwxrwxr-x  7 ostechnix ostechnix 4096 Jan 17 19:13 evisum
drwxrwxr-x  7 ostechnix ostechnix 4096 Jan 17 19:13 express
drwxrwxr-x  6 ostechnix ostechnix 4096 Jan 17 19:13 rage

Zmień katalog i wyświetl pliki w jednej komendzie w powłoce Fish

Dostosowywanie limitu czasu

Możesz dostosować czas oczekiwania do swoich potrzeb. Na przykład:

  • Użyj 0.5s dla krótszego limitu czasu: timeout 0.5s ls -l
  • Użyj 2s dla dłuższego limitu czasu: timeout 2s ls -l

Po prostu zmodyfikuj wartość timeout w funkcji.

Opcjonalnie: Nadpisz domyślną komendę cd

Jeśli chcesz, aby to zachowanie dotyczyło domyślnej komendy cd, zdefiniuj ponownie cd w konfiguracji swojego powłoki Fish:

function cd
    builtin cd $argv[1]
    and begin
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

Teraz, za każdym razem gdy użyjesz cd, katalog będzie automatycznie wyświetlany z limitem czasu wynoszącym 1 sekundę.

Metoda 3: Użyj skrótu

Shell Fish obsługuje skróty, które rozwijają się w pełne polecenia, gdy je wpisujesz. Aby utworzyć skrót dla cd, który zawiera ls, uruchom:

abbr --add cd 'cd $argv; and timeout 1s ls -l'

Ta metoda jest przydatna, ponieważ zachowuje oryginalne polecenie cd, jednocześnie automatycznie uruchamiając ls z limitem czasu, aby zapobiec zawieszeniom.

Bonus: Użyj exa do szybszego wyświetlania listy

Jeśli często pracujesz z dużymi katalogami, rozważ użycie exa, nowoczesnej alternatywy dla ls. exa jest szybsze i oferuje więcej funkcji, dzięki czemu lepiej nadaje się do obsługi katalogów zawierających wiele plików.

Oto jak zmodyfikować funkcję, aby używać exa:

function cdls
    builtin cd $argv[1]
    and begin
        echo "Changed to directory: $PWD"
        timeout 1s exa -l
    end
end

Już przygotowaliśmy listę nowoczesnych alternatyw dla popularnych poleceń Linuksa. Ta lista przedstawia najlepsze zamienniki dla starych klasycznych poleceń Linuksa. Proszę odwiedzić następujący link, aby uzyskać więcej szczegółów:

  • Najlepsze nowoczesne polecenia Linuksa dla początkujących i ekspertów

Usuń funkcję Ryby

Jeśli nie chcesz już używać funkcji fish cdls, po prostu usuń wiersze, które dodałeś w pliku konfiguracyjnym fish. Po usunięciu tych wierszy, przeładuj konfigurację fish używając polecenia:

source ~/.config/fish/config.fish

Jeśli dodałeś skrót dla cd w shellu Fish, jak pokazano w Metodzie 3, możesz go usunąć za pomocą polecenia:

abbr --erase cd

Spowoduje to usunięcie skrótu i przywrócenie cd do domyślnego działania. Jeśli chcesz upewnić się, że skrót zostanie trwale usunięty, sprawdź swój plik ~/.config/fish/config.fish i usuń każdą linię, która definiuje abbr --add cd.

Trzymaj funkcje w osobnym katalogu dla łatwego zarządzania

Jak być może zauważyłeś, zapisałem funkcję w pliku konfiguracyjnym Fish w tym samouczku. Chociaż to działa, nie jest to najlepsze podejście.

Dodawanie większej liczby funkcji może zaśmiecać plik konfiguracyjny, utrudniając jego zarządzanie. Aby utrzymać go w czystości, przechowuj każdą funkcję Fish w osobnym pliku w oddzielnym katalogu. Aby uzyskać więcej informacji, przeczytaj następujący przewodnik:

  • Jak zarządzać funkcjami w powłoce Fish na Linuxie

Wniosek

Łączenie cd i ls w powłoce Fish to świetny sposób na uproszczenie nawigacji w wierszu poleceń w Linuxie. Korzystając z polecenia timeout, możesz wykonywać automatyczne listowanie katalogów bez ryzyka problemów z wydajnością lub zawieszenia powłoki.

Niezależnie od tego, czy używasz jednorazowego polecenia, własnej funkcji czy skrótu, dodanie limitu czasu zapewnia uniknięcie problemów z wydajnością podczas pracy z dużymi katalogami. Korzystając z tych metod, możesz sprawić, że nawigacja po katalogach w powłoce Fish będzie szybsza i bardziej wydajna.

Powiązane artykuły:

  • [Wskazówki Bash] Jak użyć cd i ls w jednym poleceniu
  • Jak szybciej poruszać się po katalogach w Linuksie