Puncte:3

Extensia fișierului script Bash

drapel cn

Am un server unde am diferite tipuri de scripturi.

Aceste scripturi trebuie să fie deschise cu diferite shell-uri, cum ar fi:

sh ./do_one_thing.sh
bash ./do_another_thing.sh

cel .SH extensia este periculoasă pentru mine mai ales dacă nu m-am conectat la server de mai mult timp. Sau dacă cineva necunoscut trebuie să facă o înlocuire.
S-ar putea să execut accidental sh ./do_another_thing.sh

Va face vreo diferență dacă îmi numesc scenariul face_un_alt_lucru.bash? Acest lucru ar crea încă un strat de siguranță.

În plus, aș dori să știu pentru ce este linia shebang de la început, în afară de un memento pentru administrator (#!/bin/bash) dacă este suprascris de sh ./do_another_thing.sh oricum. Mi se pare așa că trebuie să existe o modalitate mai adecvată de a executa scenariul, recunoscând shebang-ul.

Puncte:8
drapel ru

Shebang din partea de sus a fișierului definește ce interpret este rulat atunci când rulați ./numele_fișierului (presupunând că este executabil).

#!/bin/cat
testul 123

va tipări pur și simplu fișierul de mai sus atunci când îl rulați cu ./numele_fișierului, deoarece va rula pisica nume_fișier.

#!/bin/echo
Salut Lume

va tipări pur și simplu numele_fișierului, pentru că rulează echo numele_fișierului.

Setarea la bash sau sh vă va permite să alegeți cu ce interpret rulează, atâta timp cât vă amintiți să îl invocați cu ./numele_fișierului.

Acestea fiind spuse, folosind .SH pentru sh, și .bash pentru bash funcționează bine, albiet non-standard. Extensiile de fișiere sunt destul de fluide pe Linux.

typecasto avatar
drapel ru
@user68186 Hopa! Fix acum.
paul garrett avatar
drapel cx
Nu numai că extensiile de fișiere sunt „fluide”, cred că sunt în mare parte ignorate, nu?
drapel in
@paulgarrett Depinde foarte mult de aplicația exactă, dar majoritatea lucrurilor de pe aproape orice platformă, în afară de Windows, macOS sau Android, cărora le pasă de tipurile de fișiere, se uită la conținutul sau metadatele fișierelor și revin doar la extensiile de fișiere dacă nu pot. în caz contrar, determinați tipul fișierului.
Puncte:5
drapel ng

Linia shebang definește interpretul, în acest caz /bin/bash. Dacă veți folosi întotdeauna același interpret pentru un singur script, aici îl definiți, ceea ce vă scutește de a fi nevoit să îl definiți în comandă. Nu are sens să folosești shebang pentru a defini un interpret pe care nu vrei să-l folosești pentru acel script.

Nu înțeleg cu adevărat cum o extensie este mai periculoasă decât alta sau cum poți introduce din greșeală toate astea. Dacă utilizați completarea filelor, oricare dintre extensii se va completa automat, astfel încât să nu vă protejeze împotriva stângăciei. Extensia este utilă, astfel încât să puteți identifica/rețineți ce fel de fișier este.

În orice caz, nu contează cum numești scenariul. Nici macar nu are nevoie de prelungire.

Există o întrebare bună Unix&Linux care are mai multe informații despre asta.

Puncte:1
drapel cn

Dacă numele unui fișier cu setul de biți de permisiune de execuție este introdus pe linia de comandă sau dacă numele unui astfel de fișier este transmis unuia dintre apelurile variantei exec*() ale bibliotecii C runtime, nucleul Linux va încerca să încărcați și executați-l.

Primul lucru pe care îl face nucleul Linux este să citească primii câțiva octeți ai fișierului, căutând secvențe „magice” cunoscute. Una dintre aceste secvențe magice poate fi interpretată și ca șirul ASCII „#!” cunoscut și sub denumirea de „hash bang” și prescurtat la „shebang”. Când încărcătorul vede asta, va interpreta restul liniei ca numele unui alt fișier pentru exec, trecând primul fișier ca argument. O altă valoare magică este „\x7fELF”, care este un fișier executabil binar clasic, cum ar fi, de exemplu, /bin/sh însuși. Rețineți că implicit pentru încărcătorul de nucleu, dacă fișierul nu are o magie recunoscută, este să executați /bin/sh și să îi transmiteți numele fișierului ca prim argument -- echivalentul a avea un shebang de „#!/bin /SH".

De fapt, marcarea scriptului ca executabil folosind chmod +x ./do_one_thing.sh împreună cu un shebang de „#!/bin/sh” este echivalentul lui sh ./do_one_thing.sh. „Extensia de fișiere” sau alte concepte DOS sunt cu adevărat irelevante în afara DOS, a sistemelor sale de operare ancestrale, cum ar fi CP/M, și a sistemelor de operare descendente, precum Microsoft Windows.

Dacă doriți cel mai bun nivel de siguranță, marcați fișierele ca executabile și utilizați shebang-ul corespunzător. Nu te baza pe oameni pentru a face ceea ce trebuie.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.