Kirjoittaja Aihe: Miten saan bash scriptin jättämään komentokehotteen ikkunan auki  (Luettu 9026 kertaa)

0 jäsentä ja 1 Vieras katselee tätä aihetta.

Majava

  • Vieras
Komento scripti toimii.
Miten saan sen jättämäään ikkunan auki suorituksen jälkeen.

Jos avaan komento kehoitten ja ajan scriptin moi.cmd, niin se toimii ihan ok.
Kun teen siitä kuvakkeen (linkin) työpöydälle ja ajan scriptin linkistä se ei tee mitään.

(varmaan tekee, mutta sulkee ikkunan samantien.)
Miten saan komentokehoitteen jäämään auki?
Koodia: [Valitse]
#!/bin/bash

# tiedosto moi.cmd
ls -la
echo "moi"


guest728

  • Vieras
Linkin päällä hiiren oikealla näppäimellä
-> properties -> application > advanced options
  • run in terminal
  • do not close when command exits


Näin siis kde 3.5 os 10.3:ssa

Poissa arijoutsi

  • Käännösryhmä
  • *
  • Viestejä: 2062
  • Sukupuoli: Mies

Näin siis kde 3.5 os 10.3:ssa

Samoin 3.5/11.1
HP Elite book, openSUSE Leap 15.2
Mac mini Catalina.
Puhelin, iPhone SE.

Majava

  • Vieras
Ei ymmärrä miten ton teitte!!!

Mulla ihan erillaiset kuvakkeet.
Kokoonpano:
Suse 11.0 / KDE3.5.9 kernel 2.6.25.20-0.5-pae

Aivan sama painanko hiiren kakkospainiketta tiedoston, vai linkin päällä sama ikkuna aukeaa.
Kuvaia tiedoston päällä hiiern "kakkosta"

Linkissä on vain hieman eri tekstit
linkissä on Yleinen välilehdellä muuten samat tiedot, paitsi
Sijainti kohdassa on /home/userxx/Desktop.

Linkin oikeudet välilehti on samanlainen tiedot erit
Omistaja = Linkki
Ryhmä = Linkki
Muu = Linkki
Eli tuossa kohdassa lukee teksti "Linkki" ja se on harmaana, eikä sitä voi muuttaa.

Tiedoston päällä hiiren "kakkosta" vastaavat tiedot
Omistaja = Voi lukea ja kirjoittaa
Ryhmä = Voi lukea
Muut = Voi lukea

Rasti ruudussa "Suoritettava"

Kohtaa "Run in terminal" en löydä.
Ei löydy käyttäjän tiedostonhallinnalla, eikä vaikka ottaa käyttöön työkalun "Tiedostonhallinta pääkäyttäjänä"

Mulla on toisessa koneessa SUSE 11.1 siinä on hieman erinäköiset ikkunat(kuvakkeet), mutta valinnat ja tekstit on samat kun kuvissakin (11.0) En siitäkään löytänyt tuota valintaa
"Run in terminal" vaikka se kone on enkun kielinen.

Lisäsin tuohon skriptiin "sleep 5"
Koodia: [Valitse]
#!/bin/bash
# tiedosto moi.cmd
(ls -la)
sleep 5
echo "moi"

Ei avaa koko ikkunaa, vaal suorittaa skriptin jossain taustalla.

Mulla on hatara muistikuva että jollain komennolla/parametrillä tuonne skriptiinkin voi sanoa "aja uudessa ikkunassa".

Kuvia:
« Viimeksi muokattu: 24.09.2009 - klo:17:11 kirjoittanut Majava »

Poissa SuperOscar

  • Käännösryhmä
  • *
  • Viestejä: 833
  • Sukupuoli: Mies
  • Tänään täällä, huomenna poissa
    • Legisign.org
Linkin oikeudet välilehti on samanlainen tiedot erit
Omistaja = Linkki
Ryhmä = Linkki
Muu = Linkki
Eli tuossa kohdassa lukee teksti "Linkki" ja se on harmaana, eikä sitä voi muuttaa.

Katsot siis linkin etkä alkuperäisen tiedoston ominaisuuksia. Etsi jälkimmäinen ja säädä sitä.
pöytäkone 1: Debian GNU/Linux 11, Fedora 37; pöytäkone 2: openSUSE Tumbleweed; kannettava 1: openSUSE Tumbleweed; kannettava 2: CentOS Stream 9; RPi 1: Ubuntu 22.04 LTS; RPi 2: LibreELEC 10

Poissa arijoutsi

  • Käännösryhmä
  • *
  • Viestejä: 2062
  • Sukupuoli: Mies
Käviskö näin.
HP Elite book, openSUSE Leap 15.2
Mac mini Catalina.
Puhelin, iPhone SE.

Majava

  • Vieras
On se vaan kumma kun toi tuntuu ihan helpolta ja mää se vaan en osaa.

Kokeilin tota töissä Susella en löytänyt sielläkään rastia "Run in terminal"
Kotona kaksi konetta toisessa Suse 11.0 suomi ja toisessa 11.1 enkku.
Kummastakaan en löydä ko kohtaa. Lisäksi mulla on ihan eri näköiset valikot.
Laitan lisää kuvia Suomenkieliset on 11.0 ja UK 11.1 versiosta.

Kokeilin tota samaa mun media PC:llä, siinnä Ubuntu.
Ei siitäkään löytynyt rastia "Run in terminal". ei tiedostosta, eikä linkistä.
Annoin tiedostolle ajo-oikeudet, tein linkin ja käynnistin.
Silloin kysyy että ajetaanko terminaalissa. Ajaa ihan ok. mutta menee heti skriptinjälkeen kiinni.
Laitoin ennen viimeistä echoa sleep 10, jolloin listauksen näkee odottaa ja menee niin nopeasti kiinni ettei viimeistä echo "moi" kerkiä näkemään.

Kun katsoo noita kuvia, niin aiemmissa tiedoston määrittelyissä yleiset välilehdellä on rasti "suoritettava" linkin vastaavassa sitä ei ole.
Lisäksi ninkin määrittelyt on harmaina ja niitä ei voi muuttaa.

Poissa jmp

  • openSUSE Member
  • *
  • Viestejä: 4541
  • Sukupuoli: Mies
    • openSUSEa suomeksi
Avaa tekstimuokkain ja kopioi siihen alla oleva(muokkaa niin että sopii järjestelmääsi)

[Desktop Entry]
Encoding=UTF-8
Type=Application
Icon=/usr/share/icons/oxygen/scalable/status/object-locked-verified.svgz
Exec="/home/risto/bin/OmaSkripti.pääte"
Name=MunOmaSkripti


Tallenna se sitten Desktop-hakemistoon, esim. tapauksessa tallennusnimi olisi

MunOmaSkripti.desktop

Jotta tuo toimisi muuta Exec= osoittamaan skriptiisi tai kopioi se oma skriptisi bin-hakemistoon.
Nyt sun pitäisi pystyä muuttamaan noita asetuksia.
Ja muistakaa pitää hauskaa ;)

openSUSE Tumbleweed (x86_64)

Majava

  • Vieras
Lainaus
"Jotta tuo toimisi muuta Exec= osoittamaan skriptiisi tai kopioi se oma skriptisi bin-hakemistoon.
Nyt sun pitäisi pystyä muuttamaan noita asetuksia."

En ymmärtänyt mitä iloa on että asetuksia pääsee muokkaamaan, kun se rasti "Run in terminal" puuttuu!

No ohjeet on saatu, joten tein ohjeiden mukaan.
Kuvake ilmestyi työpöydälle ja sen ominaisuuksia pystyi muokkaamaan.

Sitten testi. Pah ei toiminut.

Tuolla samassa Desktop hakemistossa on paljon muitakin tiedostoja kutrn MotzillaFirefox.Desktop joten sitä tutkimaan.
Tässä pätkä tiedostosta.
Koodia: [Valitse]
Name=Firefox
Comment=Web Browser
TryExec=firefox
Exec=firefox %u
Icon=firefox
Terminal=false
MimeType=text/html;application/xhtml+xml
Type=Application
NotShowIn=GNOME;

Tuo rivi "Terminal=false" kiinniti huomiota.
Kopioin sen omaan tiedostooni ja muutin muotoon "Terminal=True"

Kas kumaa nyt pelittää.

Viellä olisi yksi pikku säätö tehtäv, jotta tarvittavat palikat olisi kasassa. Kun skripti on ajettu niin ikkuna sulkeutuu tuon "sleep xx" ajan jälkeen.

Dos bateissa oli semmoinen komento kuin pause. Mikähän olisi vastaava?

Miksi moinen vaiva ls -la komentoskriptin takia?
Tuo oli vain "tee jotai" kokeilu, oikeasti halusin tehdä varmistus skriptin

varmistaskripti.cmd
su
# mount
mount paikallinen varmistuslevy
mount verkkolevy

#varmista
kopio kuvat paikalliseen varmistuslevyyn
kopio kuvat verkkolevyyn
kopio dokumentit verkkolevyyn

# umount
irroita paikallinen levy
irroita verkkolevy

# end

Suuret kiitokst kaikille avusta.

PS.
Nyt kaikki sitten ilolla tiedostoja varmistamaan.


Majava

  • Vieras
Tässä tuo Desktop hakemiston code

Koodia: [Valitse]
[Desktop Entry]
Encoding=UTF-8
Type=Application
Terminal=true
Icon=/usr/share/icons/oxygen/scalable/status/object-locked-verified.svgz
Exec="/home/user/moi.cmd"
Name=MunOmaSkripti

Poissa jmp

  • openSUSE Member
  • *
  • Viestejä: 4541
  • Sukupuoli: Mies
    • openSUSEa suomeksi
Lainaus
"Jotta tuo toimisi muuta Exec= osoittamaan skriptiisi tai kopioi se oma skriptisi bin-hakemistoon.
Nyt sun pitäisi pystyä muuttamaan noita asetuksia."

En ymmärtänyt mitä iloa on että asetuksia pääsee muokkaamaan, kun se rasti "Run in terminal" puuttuu!

Vaikka teen minkälaisen skritin, niin tuo kohta löytyy kyllä.

katso kuvankaappaus

Lainaus
Tuo rivi "Terminal=false" kiinniti huomiota.
Kopioin sen omaan tiedostooni ja muutin muotoon "Terminal=True"

Kas kumaa nyt pelittää.

Niin, tuo on nimenomaan se mitä tuo "run in terminal" tiedostoon lisää ;)

Lainaus
Dos bateissa oli semmoinen komento kuin pause. Mikähän olisi vastaava?

Olisiko tästä apua > http://tldp.org/LDP/abs/html/dosbatch.html

Tässä tuo Desktop hakemiston code

Koodia: [Valitse]
[Desktop Entry]
Encoding=UTF-8
Type=Application
Terminal=true
Icon=/usr/share/icons/oxygen/scalable/status/object-locked-verified.svgz
Exec="/home/user/moi.cmd"
Name=MunOmaSkripti

Laita se oma skriptisi kotihakemistosi bin-hakemistoon ja anna sille suoritusoikeus.
Eli Exec="/home/user/bin/moi.cmd"

Ja muistakaa pitää hauskaa ;)

openSUSE Tumbleweed (x86_64)

Majava

  • Vieras
Kiitos linkistä jmp

Apu löytyi.
Pause komentoa vastaavaa ei taida olla, mutta vaikka näin
Laitetaan odotusajaksi 2 tuntia ja ohjeteksti
Dossihan tulostaa tuon ohjeen "paina jotain jatkaaksesi"

Koodia: [Valitse]
echo "Sulje ikkuna Ctrl+C"
sleep  2h

Majava

  • Vieras
Olet oikeassa jmp olin huolimaton!

Kun olin tehnyt tuon tiedoston tuonne user/Desktop-hakemistoon ja kuvake ilmestyi työpöydälle kokeilin sitä heti.
Ei toiminut

En ollut avannut sitä hiiren "kakkosella" silloin sieltä olisi löytynyt tuo välilehti Sovellus ja sieltä Lisäasetukset josta olisi voinut valita rastilla "Käynnistä Pääteikkunassa".

Tuo tiedodtoon lisäämäni rivi "Terminal=True" laitta tuon rastin päälle, (rasti ilmestyy välilehdelle) jolloin homma toimii.


Testailin seuraavat kokoonpalot

suse      KDE
11.0      3.5.9
11.0      3.5.7
11.1      4.1.3 *  tarkastan illalla

Näissä kokoonpanoissa ei tule kopiota, tai linkkiä tehtäessä työpöydälle kuvakkeen ominaisuudet ikkunaan välilehteä "sovellus" joten lisäasetukset ja "Suorita ikkunassa".puuttuu valinnoista.

Sensijaan jmp:n ohjeella tehtynä valinta on.

Liitteenä samassa koneessa tehtyt
kuvat kuvakkeista
- kuvake jmp:n ohjeella tehtynä
- kuva linkkinä tehtynä kuvakkeesta
Kopiossa on aivan samat valinnat, kuin linkissä, joten sekään ei toimi

Muokkaus = * versio tarkistettu
« Viimeksi muokattu: 27.09.2009 - klo:21:31 kirjoittanut Majava »

Poissa jmp

  • openSUSE Member
  • *
  • Viestejä: 4541
  • Sukupuoli: Mies
    • openSUSEa suomeksi
Yksi vaihtoehto olisi käyttää noiden työpöytäympäristöjen mahdollisuuksia

esim näin:
Koodia: [Valitse]
#! /bin/sh

SOURCE=$HOME/myFiles
DEST=/work/BACKUP

mountBackupDisk()
{
kdesu 'mount /dev/disk/by-id/usb-WDC_WD-*-0\:0-part1 /work/BACKUP'
}

backStuffUp()
{
kdialog --passivepopup "<strong>Varmuuskopioidaan tiedostoja</strong>" --title "rsync $SOURCE -> $DEST" 5
rsync -h --progress --stats -r -tgo -l -p -D --update  $SOURCE $DEST
}

syncDisk()
{
kdialog --passivepopup "<strong>Suoritetaan sync</strong>" --title "Varmistetaan kirjoitus" 5
sync
wait
kdialog --passivepopup "<strong>sync suoritettiin onnistuneesti, irrotetaan levy järjestelmästä</strong>" --title "Varmuuskopiointi suoritettu!" 5
}

umountBackupDisk()
{
kdesu umount /work/BACKUP
}

mountBackupDisk
wait
backStuffUp
wait
syncDisk
wait
umountBackupDisk

Gnomessa vaikka näin

Koodia: [Valitse]
#! /bin/sh

SOURCE=$HOME/myFiles
DEST=/work/BACKUP

mountBackupDisk()
{
gnomesu 'mount /dev/disk/by-id/usb-WDC_WD-*-0\:0-part1 /work/BACKUP'
}

backStuffUp()
{
notify-send "<strong>Varmuuskopioidaan tiedostoja</strong>"
rsync -h --progress --stats -r -tgo -l -p -D --update  $SOURCE $DEST
}

syncDisk()
{
notify-send "<strong>Suoritetaan sync</strong>"
sync
wait
notify-send "<strong>sync suoritettiin onnistuneesti, irrotetaan levy järjestelmästä</strong>"
}

umountBackupDisk()
{
gnomesu umount /work/BACKUP
}

mountBackupDisk
wait
backStuffUp
wait
syncDisk
wait
umountBackupDisk

Tuon voisi tehdä huomattavasti paremminkin, mutta en nyt millään jaksanut siihen sen tarkemmin paneutua(nopeasti testattuna tuo ylempi ainakin toimi).
Jos testaatte tuota niin muuttakaa /dev/disk/by-id/usb-WDC_WD-*-0\:0-part1 vastaamaan omaa varmuuskopiolevyänne.
Ja muistakaa pitää hauskaa ;)

openSUSE Tumbleweed (x86_64)

jboman

  • Vieras
Konsolissa voi käyttää ainakin komentoa read, jotta scriptin suoritus ei lopu (ei siis sleep komentoa)

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_08_02.html

-- loppurivit --
echo "Press ENI KII"
read PALAUTE  # Jäädään odottamaan käyttäjän näpyttelyä
echo ${PALAUTE}
exit;