Problemem tutaj nie jest problem z przekierowaniem Linuksa; jest to raczej podstawowe nieporozumienie dotyczące działania rurociągu. Przekierowanie tutaj nie działa, ponieważ tylko cięcie jest w rzeczywistości drukowane na standardowe wyjście. stdout dla polecenia echo został potokowany do stdin cuta (który nie jest używany w tym przypadku, ponieważ określono plik).
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
jest to, co chcesz, a nie nieeleganckie w ogóle (Wymieniłem swoje ;
ze &&
tak, że polecenie zostanie wykonane cięcie tylko jeśli nagłówek jest z powodzeniem napisane; w ten sposób, że nie będzie wykonywał jeśli nie masz uprawnień do tworzenia lub napisać do plik_wyjściowy ).
Możesz to również zrobić w podpowłoce, np.
(echo "header line"; cut -c 1-5 input_file) > output_file
ale nie ma w tym żadnej realnej korzyści, a przy bardziej złożonych przykładach może powodować problemy, jeśli nie jesteś zaznajomiony z zasięgiem podpowłoki.
Jeśli chcesz wyciąć, aby przejść przez standardowe wejście na standardowe wyjście, możesz spróbować:
echo "header line" | cut -c 1-5 - input_file
(Myślnik jest powszechnym skrótem dla standardowego wejścia)
Spowoduje to jednak również wykonanie operacji cięcia na stdin (co spowoduje powstanie linii nagłówka „header”). Trudno powiedzieć, czy tego właśnie chcesz, czy nie z pytania.
{ .... } > some_file 2>&1
(będzie „sprać” jakis_plik nie sprać, ale zamiast dołączania do niej, po prostu zmienić.>
W>>
:{ ... } >> some_file 2>&1
)