Chcę utworzyć alias bash dla grep, który dodaje numery wierszy:
alias grep='grep -n'
Ale to oczywiście dodaje również numery linii do rurociągów. Przez większość czasu (i nie przychodzą mi na myśl żadne wyjątki) Nie chcę numerów linii w potoku (przynajmniej wewnętrznie, prawdopodobnie OK, jeśli jest ostatni) i nie chcę dodawać sed / awk / cut do rurociąg tylko po to, aby je wyjąć.
Być może moje wymagania mogłyby zostać uproszczone, aby „dodawać numery linii tylko wtedy, gdy grep jest jedynym poleceniem w linii”. Czy można to zrobić bez szczególnie brzydkiego pseudonimu?
źródło
[[ -t 0 && -t 1 ]]
jeśli chcesz numery linii tylko wtedy, gdy zarówno standardowe wejście, jak i standardowe wyjście są podłączone do terminala.(dla pełności)
Chociaż odpowiedź @ enzotib jest najprawdopodobniej tym, czego chcesz, to nie o to prosiłeś.
[ -t 1 ]
sprawdza, czy deskryptor pliku jest urządzeniem końcowym, a nie tym, że jest czymś innym niż potok (jak zwykły plik, gniazdo, inny typ urządzenia, taki jak/dev/null
...)[
Komenda nie ma odpowiednika-t
, ale do rur. Aby uzyskać typ pliku skojarzonego z deskryptorem pliku, należy wykonać na nimfstat()
wywołanie systemowe. Nie ma do tego standardowego polecenia, ale niektóre systemy lub powłoki mają takie.Z GNU
stat
:Albo
zsh
i własnystat
wbudowany (który poprzedza jeden GNU przez kilka lat), tutaj załadowany jakzstat
tylko:Teraz kilka notatek:
Nie tylko rurociągi powłokowe używają rur.
lub:
lub:
także biegnij
grep
ze stdout do rury.Jeśli twoja powłoka jest
ksh93
, pamiętaj, że w niektórych systemach używa potoków zamiast potoków w swoich potokach.źródło