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 lsZastą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:
- 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.
- Nieodpowiadająca powłoka: Twój terminal może się zawiesić podczas próby wyświetlenia listy plików.
- 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.fishDodaj 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
endOto rozbicie powyższej funkcji.
builtin cd $argv[1]: Zmienia na określony katalog.and begin ... end: Zapewnia, że następujące polecenia zostaną wykonane tylko wtedy, gdycdzakończy się powodzeniem.timeout 1s ls -l: Uruchamials -lz limitem czasu 1 sekundy. Jeślilszajmie więcej niż 1 sekundę, zostaje zakończony.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
endPo 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.fishKrok 3: Użyj polecenia cdls
Teraz możesz użyć polecenia cdls, aby bezpiecznie zmieniać katalogi i wyświetlać ich zawartość:
cdls /path/to/directoryPrzykł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 rageDostosowywanie limitu czasu
Możesz dostosować czas oczekiwania do swoich potrzeb. Na przykład:
- Użyj
0.5sdla krótszego limitu czasu:timeout 0.5s ls -l - Użyj
2sdla 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
endTeraz, 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
endJuż 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.fishJeśli dodałeś skrót dla cd w shellu Fish, jak pokazano w Metodzie 3, możesz go usunąć za pomocą polecenia:
abbr --erase cdSpowoduje 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
