Domanda Come rendere eseguibile un file (ad esempio uno script .sh), in modo che possa essere eseguito dal terminale


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


182
2017-12-16 12:27


origine


collegato a Come posso eseguire i file .sh nel terminale? - TuKsn
Possibile duplicato di Come posso eseguire i file .sh? - karel
Non è un duplicato, perché ho chiesto specificamente di renderlo application / x-eseguibile. L'altra domanda richiede solo l'apertura del file sh nel terminale. - Ziyaddin Sadigov


risposte:


beh, puoi farlo facendo come

chmod +x filename.sh

quindi verrà eseguito quando lo chiamerai

./filename.sh

e puoi accedere a quello script anche come applicazione.

apri il tuo terminale e digita come sotto dalla tua home directory.

gedit .bashrc

quindi nel file aperto, digita questo all'ultima riga.

alias <Name_with which you wanna call it >='./filename.sh'

salva e chiudi .

Quindi digita questo nel tuo terminale source ~/.bashrc per applicare le modifiche apportate. quindi digita semplicemente il nome che hai dato lì dopo l'alias per accedere al tuo script.

assicurati di averlo inserito nella home directory.

altro

alias <Name_with which you wanna call it >='./<path to your script >.sh'

Spero possa aiutare.


244
2017-12-16 12:33



Sapete 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 di .bashrc: exec bash per riavviare bash. - Sampath Perera
Perché il file eseguibile è ./filename.sh e non solo filename.sh? - user1993
@ user1993 sì, sto anche cercando un modo per renderlo eseguibile solo da filename e non ./filename - MycrofD
@ user1993 Generalmente, utilizzando ./filename.sh specifica un file nella directory corrente e usando filename.sh specifica un file nella directory corrente o in qualsiasi directory di PATH. Il primo utilizzo rimuove qualsiasi incertezza su quale file si accede. In questo caso, stai tentando di eseguire lo script con bash o un altro interprete (in base al presupposto #!/bin/bash come prima riga del tuo script) inserendo semplicemente il nome del file. Questo utilizzo richiede che la directory sia specificata. In alternativa, puoi provare bash filename.sh che sembra funzionare con una directory non specificata. - a505999


Esistono due modi per rendere eseguibile un file:

Metodo GUI:

Vai alla scheda permessi, quindi seleziona la casella Esegui: [] Permetti di eseguire il file come programma.

enter image description here

Metodo Terminale / Comando:

Puoi utilizzare:

cd /to/my/required/directory

Quindi corri

chmod +x filename.extension

Oppure esegui semplicemente:

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

chmod ha anche alcune opzioni più avanzate:

Gli spazi devono mostrare che è diviso: - rwx --- ---

Il primo set di --- è un 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 il Gruppo da eseguire e l'Utente a leggerlo e scriverlo (ma per qualche motivo non eseguito) sarebbe:

-rw- rx- r-- Ma questo sarebbe stato aggiunto al comando come:

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

chmod anche può farlo in numeri. È basato su binario (penso, poiché è 1,2 e 4)

Quindi ci sono questi numeri:

Esegui per utente è 100. Esegui per gruppo è 010. Eseguire da altro è 001

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

Leggi per utente è 400. Leggi per gruppo è 040. Leggi per altro è 004.

Quindi li aggiungi insieme per ottenere la combinazione desiderata.

Quindi, per consentire a tutti di leggerlo, ma solo Group da eseguire e User per scriverlo (ma per qualche motivo non eseguito) sarebbe:

400 + 040 + 004 e 010 e 200

Ciò equivale a 600 + 050 + 004 = 654.

Potresti quindi eseguire il comando.

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

E per impostare tutte le autorizzazioni puoi digitare:

chmod +rwxrwxrwx /path/to/file.extension

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

chmod +777 /path/to/file.extension

Infine, puoi fare:

chmod -777 /path/to/file.extension

Per rimuovere tutte le autorizzazioni da tutti.

E:

chmod +300 /path/to/file.extension

Per aggiungere leggere e scrivere per l'utente, senza influire su altre autorizzazioni (ad esempio autorizzazioni di esecuzione).

Questo sito web ha una cosa molto utile nella casella di controllo della griglia, in cui puoi spuntare le opzioni che desideri e ti dà il comando:

enter image description here

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

755 - Owner ha tutto, e Group e Other può leggere ed eseguire

700 - Owner ha tutto

644 - Owner può leggere e scrivere, e Group e Otherpuò leggere

600 - Owner può leggere e scrivere

E, se stai usando gruppi di utenti non banali:

775 - Owner può leggere e scrivere, e Group e Otherpuò leggere

770 - Owner e Group avere tutto, e Other può leggere ed eseguire

750 - Owner ha tutto, e Group può leggere ed eseguire

664 - Owner e Group può leggere e scrivere, e Other può solo leggere

660 - Owner e Group può leggere e scrivere

640 - Owner può leggere e scrivere, e Grouppuò leggere

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

Grazie Ilmari Karonen per mettere in evidenza quelli in uso comune!


31
2018-06-18 12:22



Non è basato su ottale (8-base) invece di binario (basato su 2)? In binario puoi avere solo 0 e 1, mentre in ottale puoi avere 0, 1, ... 6, 7 - Justinas
@Justinas binario in quanto 7 = 4 + 2 + 1 - 111 rappresenta Read e Write ed Execute. - Tim


Correre:

chmod +x /path/to/file.sh

Per renderlo non eseguibile, esegui:

chmod -x /path/to/file.sh

Ad esempio ho creato .sh file:

vi tester12.sh

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

:wq!
chmod +x tester12.sh
./tester12.sh

7
2018-06-18 12:39