Portál AbcLinuxu, 27. června 2025 12:43


Dotaz: Jak poslat argument

28.11.2017 19:05 dnes
Jak poslat argument
Přečteno: 680×
Odpovědět | Admin
Ahoj. když napíšu do terminálu ls, tak to vrátí na obrazovku nějaký text. Můžu výsledek poslat nějaké vlastní funkci jako argument (parametr), aniž bych ukládal nejprve výsledek do proměnné?

Něco jako
moje_funkce "$(ls)"
Děkuji.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.11.2017 19:14 NN
Rozbalit Rozbalit vše Re: Jak poslat argument
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jasne:
function funkce { echo $1; }

funkce "$(ls)"
28.11.2017 19:33 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
Díky, omlouvám se, uvedl jsem zrovna příklad který funguje, uvedu jiný.
function funkce() {
  echo $1
}

funkce "$(head -n 1 ~/VR/2017/"Nové požadavky"/"Stále Aktivní.txt")"
Cesta i soubor existuje a mám do něj přístup.

28.11.2017 19:52 NN
Rozbalit Rozbalit vše Re: Jak poslat argument
Tady je asi podstatne, ze nektere programy vypisuji vystup na stderr.
28.11.2017 19:59 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
Díky, tohle ale taky nejde, nebo je to špatně?
funkce "$(head -n 1 ~/VR/2017/"Nové požadavky"/"Stále Aktivní.txt" 2>&1)"
28.11.2017 22:17 NN
Rozbalit Rozbalit vše Re: Jak poslat argument
V jakem to poustis shellu? V Bash to normalne funguje.
28.11.2017 20:20 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Co tam pohledává ta vlnovka?

Proč tam nemáš uvozovky kolem "$1"?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.11.2017 21:04 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
vlnovka? no domovský adresář..

..$1 to je jedno, po první mezeru by to mělo něco i tak vypsat
28.11.2017 21:44 mankind_boost | skóre: 7 | Hliněná chýše, 5482/3
Rozbalit Rozbalit vše Re: Jak poslat argument
Ani jedno z toho není problém.
Jen skutečný mankind_boost je zárukou kvality.
28.11.2017 19:23 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zřejmě sis to ani nevyzkoušek, protože
moje_funkce "$(ls)"
normálně funguje.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.11.2017 20:28 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možná by bylo jednodušší využít přesměrování
function funkce() {
    cat
}

head -n 1 "$HOME/VR/2017/Nové požadavky/Stále Aktivní.txt" | funkce
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.11.2017 21:14 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Jak poslat argument
Na tento demo príklad asi áno, reálna funkcia bude patrne robiť čosi iné.
28.11.2017 22:01 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Reálná funkce může s těmi daty na STDIN dělat cokoliv. Klidně i uložit do proměnné po slovech do více promenných, což původní příklad nezvládá.

Nakonec se třeba dopátráme k tomu, že se použije místo všeho jen jeden příkaz a bude vymalováno:
read slovo1 slovo2 zbytek <"$HOME/VR/2017/Nové požadavky/Stále Aktivní.txt"
Osobně bych se asi vykašlal na head a vlastní funkci předal jako parametr název toho souboru, ať si ta funkce vybere data, která potřebuje.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.11.2017 22:12 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
Uložit do proměnné a vypsat echem to jde, tak nechápu, proč ten string nejde předat jako parametr.
28.11.2017 22:41 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Protože něco děláš jinak, než jak popisuješ. Možná používáš v konzoli bash, ale skript spouštíš v sh.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.11.2017 23:02 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
V souboru mám
#!/bin/bash
a spouštím to napsáním do terminálu přesně takto
/opt/requirements/main
Je to správně?

Jinak jsem zjistil následující věc
var="$(head -n 1 ~/VR/2017/"Nové požadavky"/"Stále Aktivní.txt")"

echo "aaa"
echo "-$var-"
echo "bbb"
A výsledek je
aaa
 -Požadavky na vyřízení : 6
bbb
Chybí na konci pomlčka, zkoušeno s různým textem a vždy pomlčka chybí a taky se přidá nějaká mezera na začátku řádku před pomlčku.

Napadá tě prosím proč?
28.11.2017 23:18 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Spouštění vypadá OK, i když ta cesta vypadá docela atypicky. Raději bych dal takovou, která je v $PATH, jinak je to opruz.

Součástí toho stringu je i LF na konci, který tam nejspíš dělá neplechu. Pořád ještě nechceš místo příkazu head použít read nebo alespoň sed?

Začínám mít tušení, že tě zajímá jen ta šestka na konci. To by bylo docela smutné.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.11.2017 23:47 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
read jsem taky zkoušel, výsledek byl stejný. Ještě mě napadlo s tím LF jak jsi psal, změnil jsem soubor na LF a už to funguje. Díky za pomoc! Jinak jak se spouští sh?
29.11.2017 00:31 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Takže na vině bylo DOSové zakončení řádek v souboru? Na to se dá přijít příkazem hexdump.

Pokud chceš jiný interpretr, na začátek skriptu dáš např.
#!/bin/sh
a tím dojde k přepnutí na sh. Často se používá i #!/usr/bin/env, který toho umí víc s přesměrováním.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
29.11.2017 14:13 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
Ano, přesně jak píšeš, bylo nastaveno zakončení řádku pro DOS. Na ten hexdump se mrknu. Jinak ještě jednou díky i za to info..
29.11.2017 00:56 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
K čemu je vlastně dobré znát počet požadavků na vyřízení, když skutečný počet může být třeba 4 nebo 7? Není lepší je prostě brát ze seznamu (adresáře) po jednom, dokud není seznam (adresář) prázdný?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
29.11.2017 14:15 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
Má to jenom informativní charakter, načte, předá funkci a send to email.. Jde o to, že jeden požadavek trvá hodinu, někdy 10 hodin a někdy > 3 dny.
Josef Kufner avatar 29.11.2017 02:22 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak poslat argument
Mám takové tušení, že se snažíš o něco, co by buď šlo řešit úplně jinak, nebo by to šlo řešit mnohem snadněji v něčem jiném než v bashi. Na netriviální věci doporučuju sáhnout třeba po Pythonu. Bash je navržený pro interaktivní používání a na nic moc jiného se příliš nehodí.
Hello world ! Segmentation fault (core dumped)
29.11.2017 14:24 dnes
Rozbalit Rozbalit vše Re: Jak poslat argument
Vždy to jde udělat jinak a "vždy" to jde udělat líp, je to otázka času a znalostí. Bash mám rád, nevím proč ale zatím jsem v tom udělal vždy všechno, něco znám, většinou velkou část dohledám a když už to fakt nejde, tak se prostě zeptám.

Python je otřesný jazyk, nikdy více.. jinak svůj jazyk pro linux stále hledám... ale to už říkám 15 let a vždy skončím u bashe :-D
Chytrex avatar 29.11.2017 14:46 Chytrex | skóre: 30 | Bohumín
Rozbalit Rozbalit vše Re: Jak poslat argument
S tím pythonem souhlas.. tak nějak jsme se nezkamarádili.. ale zkus ruby, není dokonalý, ale uměl jsem s tím za chvíli.
Hrdý člen KERNEL ULTRAS .:. define QUESTION ((bb) || !(bb)) .:. Odmítám vaši realitu a nahrazuji ji svou vlastní..
29.11.2017 17:18 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak poslat argument
Python nesedne každému a nehodí se na všechny typy úloh.

Pro uvedený účel by ten Bash mohl být vyhovující. Něco podobného jsem si kdysi napsal v Bashi na jednom krátkém řádku a nepotřeboval jsem k tomu ani vlastní funkce.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
29.11.2017 18:40 pavele
Rozbalit Rozbalit vše Re: Jak poslat argument
Když jsem potřeboval udělat jednoduché grafické rozhraní, použil jsem Python. Pro mne bylo nejjednodušší se jej trochu naučit a napsat v Bashi skript, který volal jednotlivé části programu (další skripty), napsané v Pythonu pro GUI, awk a sed a bash pro vyhodnocování a Gnuplot pro zobrazení.

Postupem času se mi to jeví jako dobré rozhodnutí, vše mohu bez problémů upravovat/opravovat a vyznám se v tom i po 10 letech...

Takže Python ano.

Ovšem za obrovskou výhodu linuxu považuji také to, že si každý může zvolit, co mu "sedí".

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.