Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2015-12-03 20:49:55

  bonus - Użytkownik

bonus
Użytkownik
Zarejestrowany: 2009-11-12

[SOLVED] - Echo wstawia nową linię, why?

Polecenie

Kod:

df -h | tail -n +2 | awk '{print $5 " " $6}'
81% /
0% /sys/fs/cgroup
1% /dev
1% /run
0% /run/lock
1% /run/shm
1% /run/user
81% /home/bonus

Natomiast skrypcik

Kod:

#!/bin/bash
for uz_mont in `df -h| tail -n +2 | awk '{print $5 " " $6}'`
do 
echo ${uz_mont}
done

wstawia pomiędzy argumentami nowy wiersz

Kod:

81%
/
0%
/sys/fs/cgroup
1%
/dev
1%
/run
0%
/run/lock
1%
/run/shm
1%
/run/user
81%
/home/bonus

niech ktoś mnie oświeci ;)

Ostatnio edytowany przez bonus (2015-12-03 22:08:14)

Offline

 

#2  2015-12-03 21:03:21

  Pavlo950 - człowiek pasjonat :D

Pavlo950
człowiek pasjonat :D
Zarejestrowany: 2012-02-20
Serwis

Re: [SOLVED] - Echo wstawia nową linię, why?

man echo napisał(-a):

NAZWA
       echo - wyświetla wiersz tekstu

SKŁADNIA
       echo [KRÓTKA-OPCJA]... [NAPIS]...
       echo DŁUGA-OPCJA

OPIS
       Wyświetla NAPIS(Y) na standardowe wyjście.

       -n     nie wypisuje kończącego znaku nowego wiersza

       -e     włącza interpretowania sekwencji specjalnych z ukośnikiem

       -E     wyłącza interpretowanie sekwencji specjalnych z ukośnikiem (domyślnie)

       --help wyświetla ten tekst i kończy pracę

       --version
              wyświetla informacje o wersji i kończy działanie

       Jeśli użyto opcji -e, to rozpoznawane są następujące sekwencje specjalne:

       \\     odwrotny ukośnik

       \a     dzwonek, alarm (BEL)

       \b     backspace

       \c     kończy wypisywanie wyniku

       \e     escape

       \f     wysuw strony

       \n     znak nowego wiersza

       \r     powrót karetki

       \t     tabulacja pozioma

       \v     tabulacja pionowa

       \0NNN  bajt o wartości ósemkowej NNN (1 do 3 cyfr)

       \xHH   bajt o wartości szesnastkowej HH (1 do 2 cyfr)

       UWAGA:  aktualnie  używana  powłoka  może  posiadać  swoją wersję echo, która z reguły przesłania wersję opisaną w niniejszym
       podręczniku. Proszę zapoznać się z dokumentacją używanej powłoki, aby dowiedzieć się szczegółów o obsługiwanych opcjach.  Aby
       wywołać opisaną tu wersję, można użyć polecenia env tzn. env echo ....


       Strona  internetowa  z  pomocą  GNU  coreutils: <http://www.gnu.org/software/coreutils/> Zgłoszenia błędów w tłumaczeniu echo
       proszę wysyłać na adres <http://translationproject.org/team/pl.html>

Ostatnio edytowany przez Pavlo950 (2015-12-03 21:07:25)

Offline

 

#3  2015-12-03 21:26:26

  Pakos - Członek DUG

Pakos
Członek DUG
Zarejestrowany: 2007-06-12
Serwis

Re: [SOLVED] - Echo wstawia nową linię, why?

bo pętla wszystko co po spacji traktuje jako ${uz_mont}+1

wynik jaki chcesz mozna uzyskac na kilka sposobów ale ten chyba najszybszy

Kod:

for uz_mont in `df -h| tail -n +2 | awk '{print $5 ":" $6}'`; do echo ${uz_mont}|tr ':' ' '; done

Ostatnio edytowany przez Pakos (2015-12-03 21:38:26)

Offline

 

#4  2015-12-03 21:42:55

  meciarz - Użytkownik

meciarz
Użytkownik
Zarejestrowany: 2010-06-08

Re: [SOLVED] - Echo wstawia nową linię, why?

problemem nie jest echo, a `df -h| tail -n +2 | awk '{print $5 " " $6}'` w lini for .....
jeśli wywołasz taką komendę w konsoli, to prawidłowo masz każdy wiersz w osobnej linii, natomiast wywołane w skrypcie np jako podstawienie do zmiennej zapisuje wszystko jako w jednej linii.
W takim wypadku powinieneś najpierw przekierować wyjście tego polecenia do pliku, a następnie wykonywać pętle z tego pliku.
Ale z tym takie użycie pętli for rozdzieli ponieważ, użycie spacji aby je rozdzielić dla pętli for jest błędna, gdyż on wszystkie je traktuje jako osobną wartość (jako delimiter znak spacji) :)
Jeśli nie chcesz zapisywać tego do pliku zrób np:

Kod:

for uz_mont in `df -h| tail -n +2 | awk '{print $5 "|" $6}'`
do
        echo ${uz_mont} | tr  '|' ' '
done

lub jeszcze prościej:

Kod:

printf '%s\n' "`df -h| tail -n +2 | awk '{print $5 " " $6}'`"

Ostatnio edytowany przez meciarz (2015-12-03 22:05:21)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)