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?

[quote=man echo]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.

       [b]-n     nie wypisuje kończącego znaku nowego wiersza[/b]

       -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)

       [b]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 ....[/b]

       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>[/quote]

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 ;-)

[ Generated in 0.010 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00012 SET CHARSET latin2
0.00006 SET NAMES latin2
0.00149 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.135.207.129' WHERE u.id=1
0.00079 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.135.207.129', 1714721936)
0.00048 SELECT * FROM punbb_online WHERE logged<1714721636
0.00064 DELETE FROM punbb_online WHERE ident='185.191.171.9'
0.00092 DELETE FROM punbb_online WHERE ident='3.141.41.187'
0.00098 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=27961 AND t.moved_to IS NULL
0.00007 SELECT search_for, replace_with FROM punbb_censoring
0.00133 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=27961 ORDER BY p.id LIMIT 0,25
0.00083 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=27961
Total query time: 0.00771 s