Bash on ollut shell-ympäristönä melko tunnettu jo pitkään. Siinä on kuitenkin pieni ongelma, joka on monille ylitsepääsemätön, nimittäin syntaksi on suunnattu enemmän ohjelmointitaitoisille kuin taidottomille. Tähän löytyy ainakin yksi ratkaisu - luultavasti useampiakin - nimittäin Nushell:
https://www.nushell.sh/
Nushell pitää komentojen tuloksista eräänlaista tietokantaa ja niihin voi viitata helpommin kuin tavallisessa shell-ympäristössä. Esim. 'ls' komento antaa listan tiedostoista, jos tämän haluaa bash:ssa järjestää koon mukaan on komento 'ls --sort=size' eli joutuu käyttämään vipua. Nushellin datasetin voi järjestää sen sijaan:
$ ls | sort-by size
Listaukseen voi valita halutut kentät lisäämällä:
$ ls | sort-by size | select name size
Mitäpä tämä tekee:
$ ls | sort-by size | select name size | first 5
Komennot luovat siis tauluja ja listoja asioista. Mikään ei estä luomasta näitä myös itse, jolloin itse luotuja tauluja voi käyttää siinä missä komentojenkin luomia. Ominaisuuksia on paljon enemmänkin, joten komentojen läpikäymistä varten on kirja, mitä kannattaa lukea:
https://www.nushell.sh/book/
Miksi kirjoittaa kryptisiä skriptejä, jos sitä ei ole pakko tehdä?
nushell korvaamaan bashia
20
202
Vastaukset
- Anonyymi
En ymmärrä mikä tuossa nyt on ongelmana, itse "ei vielä ihan täysexperttinä" osaan käyttää bashia joten se riittää minulle jatkossakin. En tarvitse mitään nushelliä. On se vaikeaa jos ei osaa kirjoittaa parametrejä komennolle, on se vaikeaa. Minä opettelin komentorivin jo MSDOS-aikoina joten minulle ei tuota vaikeuksia.
- Anonyymi
Nimenomaan, Bash ja msdos ovat sukua, samoin windowsin CMD-komento. Se on se ongelma. Sen asemasta, että tiedostoihin on tiedosto-näkymä tarjoaa nushell tietokanta-näkymän. Pystyt siis etsimään asioita tietokanta-hakuina yhtä hyvin samoilla komennoilla sekä windows että linux puolella - tosin toiminta ei windows-puolella ole vielä täydellistä.
Ero on siinä, että nushell:ssä tiedot pystyy jäsentämään ja nimeämään jolloin on mahdollista käyttää tätä helpottamaan komentojen luettavuutta - komennoissa itsessään esim. 'ls' ei silloin tarvitse olla rapeaa määrää vipuja, koska shell hoitaa prosessoinnin. Riittää, että tieto on esitetty sopivalla tavalla.
bash:
$ date | cut -b 14-22
22.35.56
nushell:
$ date now
-päiväys vastaavasti kuin 'date' komento
$ date to-table
-päiväys purettuna taulukkoon, tästä on helppo siepata kenttiä select:llä
$ date to-table | select year month
$ date to-table | select clock
Palataan vielä ls-komentoon:
$ ls **/*.txt | sort-by size | select name size | reverse
-ei kovin helppo bash:lla ja ei varsinkaan näin selkeä!
-valitsee tämän hakemiston alihakemistoista kaikki .txt tiedostot järjestää ne koon mukaan, kääntää järjestyksen ja tulostaa pelkästään nimen ja koon
Tai vaikka ps-komento:
$ ps | where cpu > 5
-tulostetaan prosessit, jotka käyttää cpu:ta yli 5% - Anonyymi
Anonyymi kirjoitti:
Nimenomaan, Bash ja msdos ovat sukua, samoin windowsin CMD-komento. Se on se ongelma. Sen asemasta, että tiedostoihin on tiedosto-näkymä tarjoaa nushell tietokanta-näkymän. Pystyt siis etsimään asioita tietokanta-hakuina yhtä hyvin samoilla komennoilla sekä windows että linux puolella - tosin toiminta ei windows-puolella ole vielä täydellistä.
Ero on siinä, että nushell:ssä tiedot pystyy jäsentämään ja nimeämään jolloin on mahdollista käyttää tätä helpottamaan komentojen luettavuutta - komennoissa itsessään esim. 'ls' ei silloin tarvitse olla rapeaa määrää vipuja, koska shell hoitaa prosessoinnin. Riittää, että tieto on esitetty sopivalla tavalla.
bash:
$ date | cut -b 14-22
22.35.56
nushell:
$ date now
-päiväys vastaavasti kuin 'date' komento
$ date to-table
-päiväys purettuna taulukkoon, tästä on helppo siepata kenttiä select:llä
$ date to-table | select year month
$ date to-table | select clock
Palataan vielä ls-komentoon:
$ ls **/*.txt | sort-by size | select name size | reverse
-ei kovin helppo bash:lla ja ei varsinkaan näin selkeä!
-valitsee tämän hakemiston alihakemistoista kaikki .txt tiedostot järjestää ne koon mukaan, kääntää järjestyksen ja tulostaa pelkästään nimen ja koon
Tai vaikka ps-komento:
$ ps | where cpu > 5
-tulostetaan prosessit, jotka käyttää cpu:ta yli 5%Epäilen ettet ole jaksanut paneutua edes noihin komentoihin joiden väität tekevän jotain koska niin moni väittämistäsi on virheellisiä:
VÄÄRIN
ls **/*.txt | sort-by size | select name size | reverse
VÄÄRIN
date to-table | select clock
VÄÄRIN
date to-table | select year month
Mikä pistää miehen pätemään tuolla tavalla. Joko parin komennon opiskelu oli niin ylivoimaista että mieluummin kirjoitteli huuhaata kuin olisi ottanut asiasta selvää. - Anonyymi
Anonyymi kirjoitti:
Epäilen ettet ole jaksanut paneutua edes noihin komentoihin joiden väität tekevän jotain koska niin moni väittämistäsi on virheellisiä:
VÄÄRIN
ls **/*.txt | sort-by size | select name size | reverse
VÄÄRIN
date to-table | select clock
VÄÄRIN
date to-table | select year month
Mikä pistää miehen pätemään tuolla tavalla. Joko parin komennon opiskelu oli niin ylivoimaista että mieluummin kirjoitteli huuhaata kuin olisi ottanut asiasta selvää.Annatko vielä virheilmoitukset - muuten en usko, että ovat väärin.
- Anonyymi
Anonyymi kirjoitti:
Epäilen ettet ole jaksanut paneutua edes noihin komentoihin joiden väität tekevän jotain koska niin moni väittämistäsi on virheellisiä:
VÄÄRIN
ls **/*.txt | sort-by size | select name size | reverse
VÄÄRIN
date to-table | select clock
VÄÄRIN
date to-table | select year month
Mikä pistää miehen pätemään tuolla tavalla. Joko parin komennon opiskelu oli niin ylivoimaista että mieluummin kirjoitteli huuhaata kuin olisi ottanut asiasta selvää.OIKEIN
ls **/*.txt | sort-object Length | select name, length | reverse
OIKEIN
Get-Date | Format-Table -Property Time
OIKEIN
Get-Date | Format-Table -Property Year, Month - Anonyymi
Anonyymi kirjoitti:
OIKEIN
ls **/*.txt | sort-object Length | select name, length | reverse
OIKEIN
Get-Date | Format-Table -Property Time
OIKEIN
Get-Date | Format-Table -Property Year, MonthOnnittelut, onnistuit tekemään helposta asiasta vaikean täysin asiattomalla oikein-väärin sohelluksellasi. Puhtaat objecti-viittaukset kun eivät ole nättiä koodaustapaa - varsinkaan kun esittämiäsi ei edes ole olemassa nushellissä!
$ date now | date to-table | select year month
Tuo siis oli jätetty tarkoituksella virheelliseksi herättämään keskustelua.
Ajan voi ottaa talteen:
$ let time1 = date now | date to-table | select year month
Tehdään sama, mutta muuttujanimillä time2, time3. Kootaan tiedot lopuksi tauluun:
$ let my_time_tbl = $time1 | append $time2 | append $time3
Sisällön voi katsoa vaikkapa 'echo $my_time_tbl' komennolla.
Kyseistä taulua voi indeksoida ja suodattaa riville halutut tiedot:
$ echo $my_time_tbl | select 2 hour minute
Lopputulos on se, että voit luoda yksinkertaisia datalähteitä, joissa ohjelma esim. 'ls' voi olla erittäin yksinkertainen ilman mitään sorttaus yms. ominaisuuksia ja shell:n avulla tiedon voi muokata haluamakseen näkymäksi opettelemalla yksinkertaiset perustyypit ja muokkauskomennot. - Anonyymi
😍😋😍😋😍😋😍😋😍
🍑 Nymfomaani -> https://l24.im/ecC7ux#kissagirl21
🔞❤️💋❤️💋❤️🔞💋❤️💋❤️💋🔞
- Anonyymi
Nyt meni jalustalle noston perustelut täysin pieleen. Et kyennyt osoittamaan yhtään pätevää syytä tutustua tuohon Nushell ympäristöön.
Jos et olisi valehdellut vertailujasi tehdessä ehkä olisin asentanut tutustumista varten, mutta nyt katson että olet jo perillä Nushellin ominaisuuksista etkä löytänyt todellista syytä lähteä kokeilemaan vaan jouduit epärehellisin keinoin saamaan nostetta. EI JATKOON. - Anonyymi
Toihan on aivan perseestä. Putkimerkki, eli | on nimensä mukaisesti putkitus komennolta toiselle. Eli putkimerkin avulla yhden komennon tuloste voidaan ohjata toiselle komennolle. Toi sun nyyppäshellisi siis rikkoo koko putkitussysteemin noiden sun antamiesi esimerkkien perusteella. Taitaa olla koko nushell jonkun sellasen kehittämä, joka ei ymmärrä miten shelli toimii.
- Anonyymi
Jopas osasit sanoa hyvin, totaalisen turha räpellys.
- Anonyymi
Joo, totta. Ja minun koneeseen ei mitään nussishelliä tule, vaan bashilla mennään hautaan saakka! Käyttikset tällä hetkellä Linux Mint 20.3. ja Linux Mint Debian Edition 6.
- Anonyymi
Komentoja ei putkiteta toisilleen - mikäli mahdollista - koska se on tehotonta. Sen sijaan käytetään shelliin sisäänrakennettuja datan manipulointi komentoja, jotka ovat yhteensopivia putkien kanssa. Datasettien manipulointi on homman juju. Näin ollen komennossa ei tarvitse olla yhtään datan manipulointiin liittyvää koodiriviä, koska nushell on rakennettu juuri näitä manipulointeja ajatellen.
Idea kun on käyttää järjestelmää tietokannan tapaan. Putkimerkki ei siis putkita komennolta toiselle vaan prosessoinnilta toiselle - prosessointi voi olla myös shellin ulkoinen komento. Et voi siis tehdä bash-tyyliin:
$ echo "foo" > tiedosto.txt
vaan pitää kutsua komentoa, joka osaa tehdä talletuksen:
$ "foo" | save tiedosto.txt
voit käyttää json-formaattia
$ "foo" | append "bar" | save tiedosto.json
joka voidaan lukea takaisin muuttujaan:
$ let a = (open tiedosto.json)
Tietorakenteet siis säilyvät:
$ ls | save tiedostot.json
$ let t = (open tiedostot.json)
$ echo $t
tai lyhyemmin
$ $t
manipulointeja voidaan edelleen jatkaa, koska ne tehdään aina shellin puolella:
$ $t | sort-by name - Anonyymi
Anonyymi kirjoitti:
Komentoja ei putkiteta toisilleen - mikäli mahdollista - koska se on tehotonta. Sen sijaan käytetään shelliin sisäänrakennettuja datan manipulointi komentoja, jotka ovat yhteensopivia putkien kanssa. Datasettien manipulointi on homman juju. Näin ollen komennossa ei tarvitse olla yhtään datan manipulointiin liittyvää koodiriviä, koska nushell on rakennettu juuri näitä manipulointeja ajatellen.
Idea kun on käyttää järjestelmää tietokannan tapaan. Putkimerkki ei siis putkita komennolta toiselle vaan prosessoinnilta toiselle - prosessointi voi olla myös shellin ulkoinen komento. Et voi siis tehdä bash-tyyliin:
$ echo "foo" > tiedosto.txt
vaan pitää kutsua komentoa, joka osaa tehdä talletuksen:
$ "foo" | save tiedosto.txt
voit käyttää json-formaattia
$ "foo" | append "bar" | save tiedosto.json
joka voidaan lukea takaisin muuttujaan:
$ let a = (open tiedosto.json)
Tietorakenteet siis säilyvät:
$ ls | save tiedostot.json
$ let t = (open tiedostot.json)
$ echo $t
tai lyhyemmin
$ $t
manipulointeja voidaan edelleen jatkaa, koska ne tehdään aina shellin puolella:
$ $t | sort-by nameEt taida tajuta, että tulosteen uudeenohjaus ja putkittaminen on kaksi täysin eri asiaa. Sekotat näköjään ne keskenään.
Eli esimerkiksi
echo foo > tiedosto
ei ole ollenkaan sama asia kuin putkittaminen. Tossa on kyse tulosteen uudelleenohjaamisesta eikä suinkaan putkittamisesta, josta tossa toisessa viestissä puhuttiin. > merkillä siis uudelleenohjataan tekstiä ja | merkillä putkitetaan komennon antama palaute toiselle komennolle. Noi on kaksi täysin eri asiaa ja niiden käyttötarkotukset on myös eri tarkotuksia. eli et sä voi tollatavalla sekottaa noita kahta asiaa keskenään. - Anonyymi
Anonyymi kirjoitti:
Et taida tajuta, että tulosteen uudeenohjaus ja putkittaminen on kaksi täysin eri asiaa. Sekotat näköjään ne keskenään.
Eli esimerkiksi
echo foo > tiedosto
ei ole ollenkaan sama asia kuin putkittaminen. Tossa on kyse tulosteen uudelleenohjaamisesta eikä suinkaan putkittamisesta, josta tossa toisessa viestissä puhuttiin. > merkillä siis uudelleenohjataan tekstiä ja | merkillä putkitetaan komennon antama palaute toiselle komennolle. Noi on kaksi täysin eri asiaa ja niiden käyttötarkotukset on myös eri tarkotuksia. eli et sä voi tollatavalla sekottaa noita kahta asiaa keskenään.nushell:ssä > merkki on pelkästään suurempi kuin merkki - sillä ei voi ohjata yhtään mitään! Ei tosiaan voi sekottaa, kun toista ei ole olemassa..
- Anonyymi
Anonyymi kirjoitti:
Komentoja ei putkiteta toisilleen - mikäli mahdollista - koska se on tehotonta. Sen sijaan käytetään shelliin sisäänrakennettuja datan manipulointi komentoja, jotka ovat yhteensopivia putkien kanssa. Datasettien manipulointi on homman juju. Näin ollen komennossa ei tarvitse olla yhtään datan manipulointiin liittyvää koodiriviä, koska nushell on rakennettu juuri näitä manipulointeja ajatellen.
Idea kun on käyttää järjestelmää tietokannan tapaan. Putkimerkki ei siis putkita komennolta toiselle vaan prosessoinnilta toiselle - prosessointi voi olla myös shellin ulkoinen komento. Et voi siis tehdä bash-tyyliin:
$ echo "foo" > tiedosto.txt
vaan pitää kutsua komentoa, joka osaa tehdä talletuksen:
$ "foo" | save tiedosto.txt
voit käyttää json-formaattia
$ "foo" | append "bar" | save tiedosto.json
joka voidaan lukea takaisin muuttujaan:
$ let a = (open tiedosto.json)
Tietorakenteet siis säilyvät:
$ ls | save tiedostot.json
$ let t = (open tiedostot.json)
$ echo $t
tai lyhyemmin
$ $t
manipulointeja voidaan edelleen jatkaa, koska ne tehdään aina shellin puolella:
$ $t | sort-by name"manipulointeja voidaan edelleen jatkaa, koska ne tehdään aina shellin puolella:"
Tarkennappas tätä "tehdään aina shellin puolella", missäs ne muutoin tehtäisi? - Anonyymi
Anonyymi kirjoitti:
Komentoja ei putkiteta toisilleen - mikäli mahdollista - koska se on tehotonta. Sen sijaan käytetään shelliin sisäänrakennettuja datan manipulointi komentoja, jotka ovat yhteensopivia putkien kanssa. Datasettien manipulointi on homman juju. Näin ollen komennossa ei tarvitse olla yhtään datan manipulointiin liittyvää koodiriviä, koska nushell on rakennettu juuri näitä manipulointeja ajatellen.
Idea kun on käyttää järjestelmää tietokannan tapaan. Putkimerkki ei siis putkita komennolta toiselle vaan prosessoinnilta toiselle - prosessointi voi olla myös shellin ulkoinen komento. Et voi siis tehdä bash-tyyliin:
$ echo "foo" > tiedosto.txt
vaan pitää kutsua komentoa, joka osaa tehdä talletuksen:
$ "foo" | save tiedosto.txt
voit käyttää json-formaattia
$ "foo" | append "bar" | save tiedosto.json
joka voidaan lukea takaisin muuttujaan:
$ let a = (open tiedosto.json)
Tietorakenteet siis säilyvät:
$ ls | save tiedostot.json
$ let t = (open tiedostot.json)
$ echo $t
tai lyhyemmin
$ $t
manipulointeja voidaan edelleen jatkaa, koska ne tehdään aina shellin puolella:
$ $t | sort-by name"Komentoja ei putkiteta toisilleen - mikäli mahdollista - koska se on tehotonta."
Mitä hittoa tämä tarkoittaa? - Anonyymi
Anonyymi kirjoitti:
Komentoja ei putkiteta toisilleen - mikäli mahdollista - koska se on tehotonta. Sen sijaan käytetään shelliin sisäänrakennettuja datan manipulointi komentoja, jotka ovat yhteensopivia putkien kanssa. Datasettien manipulointi on homman juju. Näin ollen komennossa ei tarvitse olla yhtään datan manipulointiin liittyvää koodiriviä, koska nushell on rakennettu juuri näitä manipulointeja ajatellen.
Idea kun on käyttää järjestelmää tietokannan tapaan. Putkimerkki ei siis putkita komennolta toiselle vaan prosessoinnilta toiselle - prosessointi voi olla myös shellin ulkoinen komento. Et voi siis tehdä bash-tyyliin:
$ echo "foo" > tiedosto.txt
vaan pitää kutsua komentoa, joka osaa tehdä talletuksen:
$ "foo" | save tiedosto.txt
voit käyttää json-formaattia
$ "foo" | append "bar" | save tiedosto.json
joka voidaan lukea takaisin muuttujaan:
$ let a = (open tiedosto.json)
Tietorakenteet siis säilyvät:
$ ls | save tiedostot.json
$ let t = (open tiedostot.json)
$ echo $t
tai lyhyemmin
$ $t
manipulointeja voidaan edelleen jatkaa, koska ne tehdään aina shellin puolella:
$ $t | sort-by name"Sen sijaan käytetään shelliin sisäänrakennettuja datan manipulointi komentoja, jotka ovat yhteensopivia putkien kanssa."
Mitäs se tämä tarkoittaa? - Anonyymi
Anonyymi kirjoitti:
Komentoja ei putkiteta toisilleen - mikäli mahdollista - koska se on tehotonta. Sen sijaan käytetään shelliin sisäänrakennettuja datan manipulointi komentoja, jotka ovat yhteensopivia putkien kanssa. Datasettien manipulointi on homman juju. Näin ollen komennossa ei tarvitse olla yhtään datan manipulointiin liittyvää koodiriviä, koska nushell on rakennettu juuri näitä manipulointeja ajatellen.
Idea kun on käyttää järjestelmää tietokannan tapaan. Putkimerkki ei siis putkita komennolta toiselle vaan prosessoinnilta toiselle - prosessointi voi olla myös shellin ulkoinen komento. Et voi siis tehdä bash-tyyliin:
$ echo "foo" > tiedosto.txt
vaan pitää kutsua komentoa, joka osaa tehdä talletuksen:
$ "foo" | save tiedosto.txt
voit käyttää json-formaattia
$ "foo" | append "bar" | save tiedosto.json
joka voidaan lukea takaisin muuttujaan:
$ let a = (open tiedosto.json)
Tietorakenteet siis säilyvät:
$ ls | save tiedostot.json
$ let t = (open tiedostot.json)
$ echo $t
tai lyhyemmin
$ $t
manipulointeja voidaan edelleen jatkaa, koska ne tehdään aina shellin puolella:
$ $t | sort-by name"Datasettien manipulointi on homman juju. Näin ollen komennossa ei tarvitse olla yhtään datan manipulointiin liittyvää koodiriviä, koska nushell on rakennettu juuri näitä manipulointeja ajatellen."
Tuo on täyttä paskaa, en edes oleta että itsekkään ymmärtäisit mitä kirjoitit, joten en kysy edes mitä tarkoittaa, vaan uskon tuon edellä olevien tavoin olevan mukana antamassa mielikuvaa jostakin pätemiseen liittyvästä tarpeesta. - Anonyymi
anna komento:
$ which cat
/usr/bin/cat <--bash vastaus
╭─┬────────┬────-──┬─────╮
│ # │ command │ path │ type │
├─┼────────┼──────┼──────┤
│ 0 │ cat │ /usr/bin/cat │ external │
╰─┴─────┴────────┴───────╯
$ which ls
/usr/bin/ls <--bash vastaus
~> which ls
╭─┬───────┬───-───┬──-──╮
│ # │ command │ path │ type │
├─┼───────┼──-────┼───-─┤
│ 0 │ ls │ │ built-in│
╰─┴───────┴───-───┴──-──╯
Tuossapa se. Bash ei tee itse juuri mitään: se kutsuu ulkopuolista käsittelijä-ohjelmaa, joka tekee kaiken, mm. datasetin manipuloinnit, kuten sorttaukset. Bash:lla ei ole mitään käsitystä datan rakenteesta, se on vain merkkijono.
Nushell voi käyttää ulkoista dataa ohjelmilta. Tällöin se lataa komennon antaman syötteen tietorakenteeseen. Tietoa manipuloidaan nushellin sisäisillä komennoilla näkymiksi dataan.
Putki-merkki ottaa siis edellisen komennon data-out:sta ja siirtää sen seuraavan data-in:iin.
Sisäisillä komennoilla homma on tietysti paremmin hallittua ja manipulointeja voi olla valmiina.
Tietoa voi siis käsitellä joko merkkijonona(kuten bash), listana, tauluna. Tietotyyppejä voi itse manipuloida, laittaa talteen ja se on tehty helpoksi - toisin kuin bash:ssa, missä törmää syntaktiseen sekamelskaan ja kryptisiin virheilmoituksiin.
Ketjusta on poistettu 5 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Olen tosi outo....
Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap162168Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta
https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi842098- 1011387
Vanhalle ukon rähjälle
Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen101256Hommaatko kinkkua jouluksi?
Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k1461188Maisa on SALAKUVATTU huumepoliisinsa kanssa!
https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663811183Aatteleppa ite!
Jos ei oltaisikaan nyt NATOssa, olisimme puolueettomana sivustakatsojia ja elelisimme tyytyväisenä rauhassa maassamme.249886Omalääkäri hallituksen utopia?
Suurissa kaupungeissa ja etelässä moinen onnistunee. Suuressa osassa Suomea on taas paljon keikkalääkäreitä. Mitenkäs ha173864- 63854
- 71853