Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Spouštění skriptů  (Přečteno 7519 krát)

Ventero

  • Závislák
  • ***
  • Příspěvků: 3664
Spouštění skriptů
« kdy: 04 Června 2023, 14:01:13 »
Pokud spustím skript v terminálu, tak to hlásí, že příkaz nenalezen. Jak mohu ručně spustit skript via terminál?

Edit:
Tak via terminál jsem to zjistil - musím použít příkaz "sh" - nechápu, proč to nejde přímo - na co je pak ten příznak spustitelnosti ? ..

Jaký je rozdíl mezi #!/bin/sh a #!/bin/bash ?
« Poslední změna: 04 Června 2023, 14:16:25 od Ventero »
Zvuky jsou mantrami a myšlenky moudrostí, prostě proto, že se mohou objevovat ...

ramael

  • Stálý člen
  • **
  • Příspěvků: 737
Re:Spouštění skriptů
« Odpověď #1 kdy: 04 Června 2023, 14:21:59 »
Pokud spustím skrpt v terminálu, tak to hlásí, že příkaz nenalezen. Jak mohu ručně spustit skript via terminál?

Edit:
Tak via terminál jsem to zjistil - musím použít příkaz "sh" - nechápu, proč to nejde přímo - na co je pak ten příznak spustitelnosti ? ..

Jaký je rozdíl mezi #!/bin/sh a #!/bin/bash ?
Bash je "nadstavba" sh. Umí toho více. Což nic nemění na tom, že máš ten shebang určitě špatně. Copak ti vypíše
Kód: [Vybrat]
which bash
which sh
Myslím že bys tam měl mít
Kód: [Vybrat]
#! /usr/bin/sh
Ale dokonalost je
Kód: [Vybrat]
#! /usr/bin/env sh
Je lepší (přenositelnější) používat sh, pokud tě neomezuje.
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

Ventero

  • Závislák
  • ***
  • Příspěvků: 3664
Re:Spouštění skriptů
« Odpověď #2 kdy: 04 Června 2023, 16:42:59 »
Shebang je v obou případech dobře - moderně je to takto - i which to tak vypsal.

Tak ono to nakonec funguje i bez toho "sh", ale musí člověk zadat kompletní cestu, bez ohledu na to, v jakém adresáři se nachází. Moc logiku mi to nedává, ale co ..

Tak a teď ještě, jak docílit toho, že to spustím rovnou jako root - aby mi to po dvojkliku nabídlo dialog se zadáním hesla (zde bolestně chybí to, jak je to ve Win - pravoklik/spustit jako správce/zadat heslo), pokud nechci dělat opičárnu s umístěním skriptu, sudoers a druhým skriptem, který bude ten první spouštět?
Zvuky jsou mantrami a myšlenky moudrostí, prostě proto, že se mohou objevovat ...

ramael

  • Stálý člen
  • **
  • Příspěvků: 737
Re:Spouštění skriptů
« Odpověď #3 kdy: 04 Června 2023, 16:59:47 »
shebang musí obsahovat absolutní cestu k interpreteru! Jinak se to nespustí. Protože shebang říká systému co za program skript se má spouštět. V unix systémech nezáleží na příponách souborů jako ve win, ale právě na takových drobnostech jako je shebang. Začíná křížkem jako komentář aby kdo to nezná (win) to ignoroval.
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

Ventero

  • Závislák
  • ***
  • Příspěvků: 3664
Re:Spouštění skriptů
« Odpověď #4 kdy: 04 Června 2023, 17:58:27 »
Tak interpreter bude ta utilita sh nebo bash a ty jsou v /bin - to tam jasne je.

To vypada na nejakou haluz terminalu nebo nejake ne moc smysluplne opatreni.
Z plochy soubor dvojklikem spustim.
Z terminalu pomoci "/home/mujadresar/Plocha/skript" spustim.
Z terminalu v umisteni Plocha (napr. pomoci cd) hlasi "Prikaz nenalezen"
To proste nedava logiku.
Zvuky jsou mantrami a myšlenky moudrostí, prostě proto, že se mohou objevovat ...

ramael

  • Stálý člen
  • **
  • Příspěvků: 737
Re:Spouštění skriptů
« Odpověď #5 kdy: 04 Června 2023, 22:01:41 »
Tak interpreter bude ta utilita sh nebo bash a ty jsou v /bin - to tam jasne je.

To vypada na nejakou haluz terminalu nebo nejake ne moc smysluplne opatreni.
Z plochy soubor dvojklikem spustim.
Z terminalu pomoci "/home/mujadresar/Plocha/skript" spustim.
Z terminalu v umisteni Plocha (napr. pomoci cd) hlasi "Prikaz nenalezen"
To proste nedava logiku.
Protože skript nestoji v ceste PATH. Pak ho musíš spouštět buď pomocí absolutní adresy nebo relativní. Bylo to tak od nepaměti. Logika je v tom, že nemůžeš a ani někdo jiný podstrčit falešný skript. Dovedeš si představit co by nadělal skript s názvem echo, mount nebo poweroff co přišel poštou obsahující toto
Kód: [Vybrat]
#! /usr/bin/env bash
rm -rf /
Jestli to odzkoušíš budeš mne proklínat na věky věků!

Další už zkoušej o 106
Proto tu máme PATH a spouštění
Pomocí absolutní adresy:
Kód: [Vybrat]
/home/mujadresar/Plocha/skript
Pomocí relativní adresy:
Kód: [Vybrat]
cd /home/mujadresar/Plocha/
pwd
./skript
cd ../
pwd
./Plocha/skript
A pokud máš /home/mujadresar/Plocha v PATH tak stačí jen
Kód: [Vybrat]
skriptať jsi kdekoliv.
Interpreter může být také python, ruby, lua, atd. Proto je nejlepší použít
Kód: [Vybrat]
#! /usr/bin/env interpreter
Pak máš jistotu, že to poběží skoro všude.
Jinak jak jsem koukal, tak ubu18 má fakt sh i bash v /bin což je zastaralé! Moderně je to v /usr/bin Což je další důvod k používání #! /usr/bin/env interpreter kvůli přenositelnosti.
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

ramael

  • Stálý člen
  • **
  • Příspěvků: 737
Re:Spouštění skriptů
« Odpověď #6 kdy: 04 Června 2023, 22:09:53 »
Tak a teď ještě, jak docílit toho, že to spustím rovnou jako root - aby mi to po dvojkliku nabídlo dialog se zadáním hesla (zde bolestně chybí to, jak je to ve Win - pravoklik/spustit jako správce/zadat heslo), pokud nechci dělat opičárnu s umístěním skriptu, sudoers a druhým skriptem, který bude ten první spouštět?
Tak to už záleží čistě jen na tvém DE (KDE, MATE, GNOME, ....) Každé to má trochu jinak a každé to má určitě nejlépe vyřešené  ;D
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

Roman Vacho

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 6184
Re:Spouštění skriptů
« Odpověď #7 kdy: 05 Června 2023, 14:09:15 »
Tak a teď ještě, jak docílit toho, že to spustím rovnou jako root - aby mi to po dvojkliku nabídlo dialog se zadáním hesla (zde bolestně chybí to, jak je to ve Win - pravoklik/spustit jako správce/zadat heslo), pokud nechci dělat opičárnu s umístěním skriptu, sudoers a druhým skriptem, který bude ten první spouštět?
Tak to už záleží čistě jen na tvém DE (KDE, MATE, GNOME, ....) Každé to má trochu jinak a každé to má určitě nejlépe vyřešené  ;D
Trochu mě děsí to postupné vypreparování spouštět věci v DE jako root. Naposled když jsme to řešil v KDE, tak začlo KDE padat jen proto, že mělo na ploše zástupce s admin právy.
Vyřešená vlákna je vhodné uzavřít "Topic Solved" dole pod vláknem.

Prosím označit text kódu v editoru # pro lepší formátování textu případného výpisu. Děkuji.

Roman Vacho

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 6184
Re:Spouštění skriptů
« Odpověď #8 kdy: 05 Června 2023, 14:10:22 »
Jaký je rozdíl mezi #!/bin/sh a #!/bin/bash ?
sh může obsluhovat v každé linux. distribuci něco jiného.
« Poslední změna: 05 Června 2023, 14:12:22 od Roman Vacho »
Vyřešená vlákna je vhodné uzavřít "Topic Solved" dole pod vláknem.

Prosím označit text kódu v editoru # pro lepší formátování textu případného výpisu. Děkuji.

ramael

  • Stálý člen
  • **
  • Příspěvků: 737
Re:Spouštění skriptů
« Odpověď #9 kdy: 05 Června 2023, 16:58:00 »
Jaký je rozdíl mezi #!/bin/sh a #!/bin/bash ?
sh může obsluhovat v každé linux. distribuci něco jiného.
Jednoduše řečeno sh je jen definice standardu (POSIX). Je jich více implementací (dash, ksh, atd.) A ty musí ten standard bezpodmíněčně dodržovat. Každý si pak přidá něco malinko navíc. Bash musí ten standard také dodržovat, ale přidává hodně komfortu navíc. Skripty psané v bashi jsou přenositelné jen v bash. Kdežto psané ve standardu sh (není to moc jednoduché a kolikrát i "nemožné") by měli být přenositelné všude. sh se v některých systémech používá kvůli velikosti. Oproti bash je o řád a něco menší. Zkus si zadat do terminálu
Kód: [Vybrat]
file -h /bin/sh
A zjistíš co ti implementuje sh standard. V debian světě je to dash, pokud jsi to cíleně nezměnil. A pak zadej
Kód: [Vybrat]
wc -c /bin/sh
a uvidíš velikost. Pak zkus
Kód: [Vybrat]
wc -c /bin/bash
a to je sakra rozdíl. Mimochodem v Alpine je sh link na busybox, v Archu na bash a ve Voidu mám za to že je ksh (laptop s tímto systémem dostal potomek tak momentálně nemůžu přesně určit). Alpine ani Void nemají bash v základu nainstalovaný! Teď mě došlo, že vlastně ani Ubuntu pokud se udělá minimální instalace přes debootstrap nemá bash. sh se hodí jen na skriptování! Pracovat s ním interaktivně je masochismus nejtvrdšího zrna. Můžeš odzkoušet tím že v terminálu zadáš
Kód: [Vybrat]
sh nebo
Kód: [Vybrat]
dash anebo
Kód: [Vybrat]
bash --posix. Vyskočit z toho jde klávesovou zkratkou ctrl+d
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

Roman Vacho

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 6184
Re:Spouštění skriptů
« Odpověď #10 kdy: 05 Června 2023, 21:16:50 »
Podnětný příspěvek!

Poprvé když jsem se setkal s minimal Bashem/Busyboxem, jsem zadrhl. Jako bych neměl ruce. :-)
Vyřešená vlákna je vhodné uzavřít "Topic Solved" dole pod vláknem.

Prosím označit text kódu v editoru # pro lepší formátování textu případného výpisu. Děkuji.

ramael

  • Stálý člen
  • **
  • Příspěvků: 737
Re:Spouštění skriptů
« Odpověď #11 kdy: 12 Června 2023, 18:31:58 »
Jinak jak jsem koukal, tak ubu18 má fakt sh i bash v /bin což je zastaralé! Moderně je to v /usr/bin Což je další důvod k používání #! /usr/bin/env interpreter kvůli přenositelnosti.
Si jdu jen tak číst aby hlava odpočinula a hele na co jsem narazil: https://www.root.cz/clanky/kam-mizi-adresare-bin-sbin-a-lib-a-proc-uz-je-nepotrebujeme/
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

 

Provoz zaštiťuje spolek OpenAlt.