Portál AbcLinuxu, 30. dubna 2025 10:40
echo -e '-\x6e'
echo -e "\x2dn"
echo -e '\x2d\x6e'
Echo mě řádně vypeklo, když jsem si v Debianu vyměnil dash za bash coby implementaci /bin/sh.
Dostat do proměnné znaky nového řádku a poslat ji na standardní vstup dalšímu příkazu tak, aby skript fungoval jak v bashi, tak v dashi (bez použití externího echa) se ukázalo být nemožné.
Objev století na mě čekal, když jsem při srovnávání implementace a specifikace v echo(1p) našel tyto věty:
Implementations shall not support any options.
It is not possible to use echo portably across all POSIX systems unless both -n (as the first argument) and escape sequences are omitted.
New applications are encouraged to use printf instead of echo.
Tudíž doporučuji do svaté války vedle zahození ifconfigu přidat zavržení echa.
ifconfig
, a proč bych to měl udělat? Resp. Co mi to -- krom dobrého pocitu jiných -- přinese? vypíše sekvenci znaků, které si shell interpretuje po svém (tj. výstup obarví).To není shell ale terminál.
/dev/pts/*
, /dev/tty[0-9]*
apod.
isatty()
ano. :-)
/dev/tty1
není terminál, ale jen znakové zařízení, které mi ten terminál zpřístupňuje, a pak jedním dechem prohlásil, že eth0 je síťová karta.
/dev/sda
je disk, protože kdybych chtěl být opravdu důsledný, musel bych trvat nejen na tom, že to není disk, ale speciální soubor sloužící jako rozhraní pro přímý přístup k tomu disku, ale ještě upozorňovat, že obecně je potřeba místo /dev/sda
říkat "blokové zařízení s major 8 a minor 0". Považuji přesnost terminologie za důležitou tam, kde nepřesnost vyjadřování může způsobit nedorozumění nebo špatné pochopení; ne tam, kde jde jen o chytání za slovíčka a předvádění se, jaký jsem frajer, že jsem vždy stoprocentně přesný (což stejně nejsem - a ani vy ne, jak jste sám předvedl na příkladu s eth0).
mi přijde docela příhodné upozornit na to, že "xterm" je mnohem blíže terminálu než "/dev/pts"
Za předpokladu, že akceptujete jen jeden možný význam slova "terminál", máte pravdu, jinak ne. Pro mne jsou přípustné i ty další, takže jsem nucen s takovým kategorickým tvrzením nesouhlasit.
Pokud si myslíte, že jsem se vyjádřil nepřesně (včetně výroku o síťové kartě), tak mě opravte.
Tvrzení, že eth0 je síťová karta, je asi tak stejně přesné jako tvrzení, že /dev/sda je disk. Jméno eth0 označuje síťové rozhraní, tedy abstraktní objekt, jehož prostřednictvím jádro umožňuje komunikovat (mimo jiné) se síťovými kartami. Navíc tu ani není korespondence 1:1, protože máme jednak virtuální síťová rozhraní (kterým neodpovídá konkrétní kus hardware), jednak třeba víceportové karty (kde jedné síťové kartě odpovídá více síťových rozhraní).
Za předpokladu, že akceptujete jen jeden možný význam slova "terminál", máte pravdu, jinak ne.Říkejte si jak chcete čemu chcete. Já se nechci tahat o slovíčka. Mně o myšlénku se jedná. Představte si, že spustíte v xtermu ssh a připojíte se na vzdálený stroj, kde napíšete příklad z článku
echo -e "== \e[31;1mCerveny text\e[31;0m =="V tomto příkladu, ačkoliv si echo povídá s /dev/pts na svém stroji, pokyn pro červenou barvu interpretuje až Váš xterm - tj. terminál. Takže toť rozdíl mezi shellem, /dev/* a terminálem (nebo jeho emulátorem). Zařízení /dev/pts (nebo tty) má svou roli, ale trochu jinou (viz manuály).
Tvrzení, že eth0 je síťová karta, je asi tak stejně přesné jako tvrzení, že /dev/sda je disk.Uznávám že to nebyl dobrý příklad, a to nejspíš proto, že síťový systém má trochu jiné principy (a zákoutí).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.