És ha a fájlnevek kiírva túl hosszúak és nem fér bele az egész a parancs hossz korlátba?
(Mondjuk nem tudom, hogy azon segít-e a $(ls) )
Én is for i in *-ot szoktam használni, de azért van, amikor ez nem működik. Olyankor én find parancsot használok, de nem bánnám, ha lenne más megoldás is, valami, ami nekem még új.
Már a kérdés is tipikus PEBKAC, amit egy lusta ember csak képes előállítani.
Programot illik full path megnevezéssel indítani.
Milyen dolog az, amikor keletkezik egy halom script csak úgy. A nevüket és a darabszámukat sem tudjuk, csak behányódnak valahova. De az biztos, hogy sorban vagy párhuzamosan kell őket futtatni. Ezek után nyilvánvalóan a path, az erőforrások, stb. futtatási körülmények is triviálisak, hiszen mindent tudunk. ;)
Ilyen kérdések a zországos zit hosszúságmérésen voltak utoljára. Ami persze lehet életszerű is, hiszen bármikor örökölhetsz egy olyan rendszert, amit vérpistike látott el furfangos programokkal.
Nem vagy te véletlenül matematikus? (Tudod, a kalasszikus vicc poénja, miszerint "a választ jól megfontolta, a válasz abszulút precíz valamint a válasszal nem mentünk semmire".)
mkdir dir
cat << EOF >dir/ls
#!/bin/bash
echo "Hülye vagyok a programozáshoz."
EOF
chmod +x dir/ls
# thread 1
cd dir; for script in $(ls); do /bin/bash -c ${script}; done
# a javaslatod
cd dir; for script in *; do /bin/bash -c ${script}; done
Eme kódot lefuttatván látható, hogy a lényeg ki sem derül. ;)
Tán az exec és a globbing értésének hiánya a probléma. :(
De a matematikus poén azért ül!
Rendes ember PATH-ában nincs benne a . (azaz az aktuális könyvtár), így hiába van az aktuális könyvtárban egy ls, a $(ls) -nél nem az fut le, hanem a rendes PATH-ban levő (azaz valószínűleg a /bin/ls). Az már más kérdés, hogy ettől még nem feltétlenül rendetlen, akinek felüldefiniáló alias, vagy shell-függvénye van az ls-re. Szóval az a fele OK, hogy ne $(ls), hanem ha már, akkor $(/bin/ls) legyen odaírva. De igazából * legyen :-)
Noha a kérdésfelvető dolga, hogy ezt megválaszolja, de azért izz az én válaszom a ki nem mondott kérdésre:
nagyon sok kérdésnél (ennél is) nekem az ugrik be elsőre, hogy valaki kitalál magának légből kapott feladatokat, és azért kérdezi meg, mert nem tudja a választ, vagy épp egy-két féle válasza van, de szeretne másoktól egyéb elmleti megoldásokat hallani. Azaz nem abban a pillanatban létező valós probléma, hanem egy kósza ötlet: "mi lenne ha ..." aéapon aklar tanulni.
Nyilván az is egy válasz, hogy "ilyen feladatot nem vállalunk el / nem oldunk meg, mert ...."
Ez legalább egy őszinte válasz, ami pár dolgot megmagyaráz.
Persze elég lenne kicsit felemelni a fejedet és észrevenni az oldal tetején: Linux-kezdő.
Elég gáz, ha a tanár urak, - akik egyébként roppant okosak - potenciálisan működésképtelen scripten rugóznak. Ez egy kezdő számára misztikus és hiteltelenné teszi az okoskodást.
Egy kezdő esetén nem kell automatikusan feltételezni, hogy
- Profi módon beállított környezetben dolgozik.
- Kifejezetten oneliner-t szeretne.
- Kezdő mivoltában ismeri a rendelkezésre álló eszközkészletet.
- Tud egyáltalán kérdezni.
(Ez jó pár éve már felmerült itt a hupon is, de most nem fogom előkeresni.) Ha jól tudom ez a parancssor hossz-korlát magához a fizikai exec(2) rendszerhíváshoz kötődik, sem a $()-féle, sem a globbingot végző kód nem exec-el. Azaz mind a két esetben ugyanaz lesz az eredmény, csak nagy eséllyel az ls-sel végzett megoldás drágább és lassabb (plusz processzt kell kreálni, a kimenetét el kell tárolni, az eredeti parancssorba bele kell túrni vs. a globnál lévő "akkor ide behányjuk ABC-rendben a fájléneveket"). Miután a fájlnevek bekerültek a parancssorba, a while ciklus lefuttatásához szintén nincs exec, egyes egyedül a parancs lefuttatásánál lesz.
Így vélhetően "nem" a válasz az első kérdésre (meg a másodikra, azaz hogy segít-e az ls).
Érdekelne, hogy mikor nem működik a for i in * neked. Nem lehet, hogy az a baj, hogy utána $i szerepel és nem "$i" ?
Igy soha: teljesen foloslegesen inditasz egy processzt (ls), majd a standard outputjan megjeleno szoveget probalod ertelmezni abban bizva, hogy az pont ugy nez ki, ahogy te elkepzeled (lasd pl.
alias ls="ls -l"
).
[muszi@muszi test]$ echo -en "#! /bin/sh\n\necho \"Hello world!\"" > abc
[muszi@muszi test]$ cp abc def$'\n'ghi
[muszi@muszi test]$ ls --show-control-chars
abc def
ghi
[muszi@muszi test]$ ls -l --show-control-chars
total 8
-rw-r--r-- 1 muszi muszi 32 Jun 20 11:39 abc
-rw-r--r-- 1 muszi muszi 32 Jun 20 11:40 def
ghi
[muszi@muszi test]$ chmod +x *
[muszi@muszi test]$ ls | while read script; do echo "Executing script \"$script\""; "./$script"; done
Executing script "abc"
Hello world!
Executing script "def"
bash: ./def: No such file or directory
Executing script "ghi"
bash: ./ghi: No such file or directory
Linux alatt a filenevben barmi lehet a tortvonalat ("/") es a 0x00 byte-ot kiveve - peldaul space, ujsor, lapdobas... :-)
Igy viszont minden esetben mukodik:
[muszi@muszi test]$ for script in *; do echo "Executing script \"$script\""; "./$script"; done
Executing script "abc"
Hello world!
Executing script "def
ghi"
Hello world!
1, Miért kell ezt így túlbonyolítani?
2, Szóval miért nincs benne az egész egy bash script-ben?
3, Miért nem csinálsz egy bash scriptet ami meghívja az összeset? Itt vissza is fordulhatunk a 2-es kérdéshez. :)
1. ez miért bonyolult?
2. nem tart sokból megírni egy ilyen scriptet
3. minek sriptet írni, az adott könyvtárban beírod parancssorba, hogy: ls | while read n; do "./$n"; done , vagy azt hogy for script in *; do "./$script"; done
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
Hozzászólások
cd dir; for script in $(ls); do /bin/bash -c ${script}; done
A $(ls) minek? A * glob pont megfelel a célra.
nem ide
Ez még csak az egymás után változat... ;)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
Érdeklődve várom az "egyszerre" változatot!
---
Science for fun...
https://hup.hu/node/164741#comment-2359907
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
Az elejére a $(ls) helyett bőven elég a *
/nemannyiraOT
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
És ha a fájlnevek kiírva túl hosszúak és nem fér bele az egész a parancs hossz korlátba?
(Mondjuk nem tudom, hogy azon segít-e a $(ls) )
Én is for i in *-ot szoktam használni, de azért van, amikor ez nem működik. Olyankor én find parancsot használok, de nem bánnám, ha lenne más megoldás is, valami, ami nekem még új.
Már a kérdés is tipikus PEBKAC, amit egy lusta ember csak képes előállítani.
Programot illik full path megnevezéssel indítani.
Milyen dolog az, amikor keletkezik egy halom script csak úgy. A nevüket és a darabszámukat sem tudjuk, csak behányódnak valahova. De az biztos, hogy sorban vagy párhuzamosan kell őket futtatni. Ezek után nyilvánvalóan a path, az erőforrások, stb. futtatási körülmények is triviálisak, hiszen mindent tudunk. ;)
Ilyen kérdések a zországos zit hosszúságmérésen voltak utoljára. Ami persze lehet életszerű is, hiszen bármikor örökölhetsz egy olyan rendszert, amit vérpistike látott el furfangos programokkal.
Nem vagy te véletlenül matematikus? (Tudod, a kalasszikus vicc poénja, miszerint "a választ jól megfontolta, a válasz abszulút precíz valamint a válasszal nem mentünk semmire".)
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
Eme kódot lefuttatván látható, hogy a lényeg ki sem derül. ;)
Tán az exec és a globbing értésének hiánya a probléma. :(
De a matematikus poén azért ül!
Rendes ember PATH-ában nincs benne a . (azaz az aktuális könyvtár), így hiába van az aktuális könyvtárban egy ls, a $(ls) -nél nem az fut le, hanem a rendes PATH-ban levő (azaz valószínűleg a /bin/ls). Az már más kérdés, hogy ettől még nem feltétlenül rendetlen, akinek felüldefiniáló alias, vagy shell-függvénye van az ls-re. Szóval az a fele OK, hogy ne $(ls), hanem ha már, akkor $(/bin/ls) legyen odaírva. De igazából * legyen :-)
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
+1, ilyen esetben érdemes átgondolni, hogy valójában mi is a feladat...
Noha a kérdésfelvető dolga, hogy ezt megválaszolja, de azért izz az én válaszom a ki nem mondott kérdésre:
nagyon sok kérdésnél (ennél is) nekem az ugrik be elsőre, hogy valaki kitalál magának légből kapott feladatokat, és azért kérdezi meg, mert nem tudja a választ, vagy épp egy-két féle válasza van, de szeretne másoktól egyéb elmleti megoldásokat hallani. Azaz nem abban a pillanatban létező valós probléma, hanem egy kósza ötlet: "mi lenne ha ..." aéapon aklar tanulni.
Nyilván az is egy válasz, hogy "ilyen feladatot nem vállalunk el / nem oldunk meg, mert ...."
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
Ez legalább egy őszinte válasz, ami pár dolgot megmagyaráz.
Persze elég lenne kicsit felemelni a fejedet és észrevenni az oldal tetején: Linux-kezdő.
Elég gáz, ha a tanár urak, - akik egyébként roppant okosak - potenciálisan működésképtelen scripten rugóznak. Ez egy kezdő számára misztikus és hiteltelenné teszi az okoskodást.
Egy kezdő esetén nem kell automatikusan feltételezni, hogy
- Profi módon beállított környezetben dolgozik.
- Kifejezetten oneliner-t szeretne.
- Kezdő mivoltában ismeri a rendelkezésre álló eszközkészletet.
- Tud egyáltalán kérdezni.
(Ez jó pár éve már felmerült itt a hupon is, de most nem fogom előkeresni.) Ha jól tudom ez a parancssor hossz-korlát magához a fizikai exec(2) rendszerhíváshoz kötődik, sem a $()-féle, sem a globbingot végző kód nem exec-el. Azaz mind a két esetben ugyanaz lesz az eredmény, csak nagy eséllyel az ls-sel végzett megoldás drágább és lassabb (plusz processzt kell kreálni, a kimenetét el kell tárolni, az eredeti parancssorba bele kell túrni vs. a globnál lévő "akkor ide behányjuk ABC-rendben a fájléneveket"). Miután a fájlnevek bekerültek a parancssorba, a while ciklus lefuttatásához szintén nincs exec, egyes egyedül a parancs lefuttatásánál lesz.
Így vélhetően "nem" a válasz az első kérdésre (meg a másodikra, azaz hogy segít-e az ls).
Érdekelne, hogy mikor nem működik a for i in * neked. Nem lehet, hogy az a baj, hogy utána $i szerepel és nem "$i" ?
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
Most fejből nem tudok példát mondani. Ha esetleg ismét előkerül (és nem felejtem el addig), akkor majd bemásolom ide azt, amit akkor próbáltam.
https://www.oreilly.com/library/view/bash-cookbook/0596526784/ch04s10.h…
Köszönöm!
Működik természetesen.
--
Nem az erős, aki sosem esik el, hanem az, aki mindig fel tud állni!
Mert nincs a fájlnevekben szóköz vagy egyéb spec karakter... :-)
Lehet, valami ilyesmivel próbálkoznék:
while read; do
[ -x ./"$REPLY" ] && ./"$REPLY" &
done < <(ls -1)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
run-parts ?
Debianizmus.
Ha a sok több mint mondjuk száz, akkor a parallelt okosítanám ki:
https://stackoverflow.com/questions/41079143/run-all-shell-scripts-in-f…
Pláne ha ezres a nagyságrend.
vagy így is:
ls | while read n; do ./$n; done
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
Igy soha: teljesen foloslegesen inditasz egy processzt (ls), majd a standard outputjan megjeleno szoveget probalod ertelmezni abban bizva, hogy az pont ugy nez ki, ahogy te elkepzeled (lasd pl.
).
Linux alatt a filenevben barmi lehet a tortvonalat ("/") es a 0x00 byte-ot kiveve - peldaul space, ujsor, lapdobas... :-)
Igy viszont minden esetben mukodik:
[Feliratkozás]
1, Miért kell ezt így túlbonyolítani?
2, Szóval miért nincs benne az egész egy bash script-ben?
3, Miért nem csinálsz egy bash scriptet ami meghívja az összeset? Itt vissza is fordulhatunk a 2-es kérdéshez. :)
1. ez miért bonyolult?
2. nem tart sokból megírni egy ilyen scriptet
3. minek sriptet írni, az adott könyvtárban beírod parancssorba, hogy: ls | while read n; do "./$n"; done , vagy azt hogy for script in *; do "./$script"; done
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
És ez párhuzamosan futtat? Vagy sorban? (szerintem utóbbi (de fixme... nem próbáltam))
---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.
párhuzamosan is lehet, valahogy így:
echo `ls | while read n; do echo -n ./"$n & "; done` >fuss
chmod 755 fuss
./fuss
persze, lehet másképp variálni, de gyakoriak a nemkívánt mellékhatások.
-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
Ha a soros nem jó, akkor tessék, párhuzamos:
Tessék megtanulni, hogy a Soros az rossz! :-D :-D :-D :-D
find /mappa/ahol/vannak -type f -print0 |xargs -I CMD -0 -P 10 sh -c CMD
10 szalon futtat.
Na, ez tetszik.