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
188
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
Kuvat! Dannyyn liitetty Helmi Loukasmäki, 22, on puhjennut naisena kukkaan - Some sekoaa: "Sä..."
Ooo, kaunis aikuinen nainen Helmistä on kasvanut siinä yli 80-vuotiaan Dannyn rinnalla! Katso uudet kuvat: https://ww473045- 472291
Suodatinpussin kastelemalla saa parempaa kahvia
Kokeilin niksiä ja kyllä tämä kahvi on parempaa nyt. Ei lainkaan maistu paperiselta. Huljuttelee hanan alla suppiloa pap1221680Tidätkö nainen
että suoraan sanottuna v.tut.aa että pääsit näin lähelle minua. Ei olisi oikeasti aikaa tähän mutta silti aina välillä o1001533Onkohan sinulla kaikki hyvin?
Nyt vähän sellainen outo tunne tuli. Sinun asiasi niin ei minulle toki tarvitse kertoa. Kunhan mietin...381067- 169934
Mikä on kaivattusi etunimi?
Otsikossa siis on kysymys eriteltynä. Vain oikeat vastaukset hyväksytään.44891Huikeeta, mahtavaa, ihan mielettömän upeeta
Me ostettiin talo Espanjasta. Tosin saadaan käyttää sitä vain muutama viikko vuodessa kun on monta muutakin ostajaa! M175846En kestä katsoa
Sitä miten sinusta on muut kiinnostuneita. Olen kateellinen. Siksi pitäisi lähteä pois71791Oho! Arja Koriseva paljastaa TTK:n ekasta suorasta lähetyksestä: "On vähän ärsyttävä yhtälö!"
Upea Arja Koriseva! Tsemppiä haasteelliseen tilanteeseen! Lue lisää: https://www.suomi24.fi/viihde/oho-arja-koriseva-14754