Come rendere eseguibile un file (ad es. Uno script .sh), in modo che possa essere eseguito da un terminale


245

Ho un file script.sh e il tipo di questo file è un file shellscript. Voglio fare questo file come file application / x-eseguibile. Come posso farlo?



1
Possibile duplicato di Come eseguo i file .sh?
Karel,

Non è un duplicato, perché ho chiesto in modo specifico di renderlo application / x-eseguibile. L'altra domanda chiede solo di aprire il file sh nel terminale.
Ziyaddin Sadigov,

Risposte:


326

È possibile contrassegnare il file come eseguibile:

chmod +x filename.sh

È quindi possibile eseguirlo in questo modo:

./filename.sh

Se si desidera utilizzare un comando diverso per avviarlo, è possibile aggiungere un alias:

gedit ~/.bashrc

Aggiungi questo alla fine del file:

alias <new name>='/home/<full path to script>/filename.sh'

Apri una nuova sessione di terminale o digita il source ~/.bashrctuo terminale da applicare. Quindi utilizza semplicemente il nuovo nome per avviare lo script.


Sai come usare il comando sudo dopo aver inserito il comando come: "alias command1 = '/home/user_name/dir/script.sh'. Nel mio, funziona senza sudo, ma non con esso.
Aditya

È necessario riavviare bash dopo aver modificato l'esecuzione .bashrc: eseguire bash per riavviare bash.
Sampath Perera,

2
Perché il file eseguibile è ./filename.she non solo filename.sh?
user1993,

@utente1993 sì, sto anche cercando un modo per renderlo eseguibile solo filenamee non./filename
MycrofD

@ user1993 In generale, l'utilizzo ./filename.shspecifica un file nella directory corrente e l'utilizzo filename.shspecifica un file nella directory corrente o in qualsiasi directory di PATH. Il primo utilizzo rimuove qualsiasi incertezza su quale file sia accessibile. In questo caso, stai tentando di eseguire lo script con bash o un altro interprete (in virtù di una #!/bin/bashprima riga del tuo script) semplicemente inserendo il nome del file. Questo utilizzo richiede che la directory sia specificata. In alternativa, puoi provare bash filename.shquale sembra funzionare con una directory non specificata.
a505999,

37

Esistono due modi per rendere eseguibile un file:

Metodo GUI:

Vai alla scheda permessi, quindi spunta la casella `Esegui: [] Consenti l'esecuzione del file come programma.

inserisci qui la descrizione dell'immagine

Metodo terminale / comando:

Puoi usare:

cd /to/my/required/directory

Quindi corri

chmod +x filename.extension

O semplicemente corri:

chmod +x /path/to/your/filename.extension

chmod ha anche alcune opzioni più avanzate:

Gli spazi indicano che è suddiviso: - rwx --- ---

Il primo set di ---è Utente. Il secondo è Gruppo e l'ultimo è Altro (chiunque altro)

r sta per Read, w per Write e x per eXecute.

Quindi per consentire a tutti di leggerlo, ma solo Group lo eseguirà e l'utente lo leggerà e lo scriverà (ma per qualche motivo non eseguirlo) sarebbe:

-rw- rx- r-- Ma questo verrebbe aggiunto al comando come:

chmod +rw-rx-r-- /path/to/file.extension

chmodpuò anche farlo in numeri. Si basa su binario (penso, dato che è 1,2 e 4)

Quindi ci sono questi numeri:

Eseguire dall'utente è 100. Eseguire per gruppo è 010. Eseguire da altro è 001

Scrivi per utente è 200. Scrivere per gruppo è 020. Scrivere da altri è 002.

Letto dall'utente è 400. Leggi per gruppo è 040. Letto da altri è 004.

Quindi li aggiungi insieme per ottenere la combinazione desiderata.

Quindi, per consentire a tutti di leggerlo, ma solo Group lo eseguirà e l'Utente lo scriverà (ma per qualche motivo non lo eseguirà) sarebbe:

400 + 040 + 004e 010e200

Ciò aggiunge fino a 600 + 050 + 004 = 654.

È quindi possibile eseguire il comando.

chmod +654 /path/to/file.extension per impostarlo.

E per impostare tutte le autorizzazioni è possibile digitare:

chmod +rwxrwxrwx /path/to/file.extension

Oppure (è un po 'più facile da scrivere, ma più difficile da ricordare ognuno):

chmod +777 /path/to/file.extension

Finalmente puoi fare:

chmod -777 /path/to/file.extension

Per togliere tutte le autorizzazioni a tutti.

E:

chmod +300 /path/to/file.extension

Per aggiungere la lettura e la scrittura per l'utente, senza influire su altre autorizzazioni (ad es. Autorizzazioni di esecuzione).

Questo sito Web ha una piccola casella di controllo della griglia molto utile, per cui puoi spuntare le opzioni che vuoi e ti dà il comando:

inserisci qui la descrizione dell'immagine

Tuttavia, non tutte le possibili combinazioni sono sensate da usare; i principali utilizzati sono i seguenti:

755 - Ownerha tutto, Groupe Otherpuò leggere ed eseguire

700 - Ownerha tutto

644 - Ownersa leggere e scrivere, Groupe Othersa leggere

600 - Ownerpuò leggere e scrivere

E, se stai usando gruppi di utenti non banali:

775 - Ownerpuò leggere e scrivere Groupe Otherpuò leggere

770 - Ownere Groupavere tutto, e Otherpuò leggere ed eseguire

750 - Ownerha tutto e Grouppuò leggere ed eseguire

664 - Ownere Grouppuò leggere e scrivere, e Otherpuò solo leggere

660 - Ownere Grouppuò leggere e scrivere

640: Ownerpuò leggere e scrivere e Grouppuò leggere

777 e 666 sono usati raramente, tranne in / tmp.

Grazie Ilmari Karonen per aver segnalato quelli di uso comune!


Non è basato su ottale (8-base) invece che binario (2-base)? In binario puoi avere solo 0 e 1, mentre in ottale puoi avere 0, 1, ... 6, 7
Justinas

Il binario di @Justinas in quel 7 = 4 + 2 + 1 - 111 rappresenta Leggi e Scrivi ed Esegui.
Tim

8

Correre:

chmod +x /path/to/file.sh

Per renderlo non eseguibile, eseguire:

chmod -x /path/to/file.sh

Ad esempio ho creato il .shfile:

vi tester12.sh

Dopo aver scritto del codice sull'editor vi, esco dall'editor vi:

:wq!
chmod +x tester12.sh
./tester12.sh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.