Creazione di un alias per uno script bash


10

Quindi ho provato e creato un aliasin .bashrc. Tuttavia, quando provo il comando ottengo:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

Ecco cosa ho nel .bashrcfile:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

La cosa divertente è che quando ho creato l'alias vi, ha funzionato. Ma il menu no. Ho cercato i post precedenti su UnixStackExchange e ho tentato di seguire altri post, ma senza risultati. Qualcun altro ha qualche suggerimento?


1
hai provato con alias menu = 'bash ./menuScript.sh'? (Non sono su una macchina Linux, non posso provarlo)
Con7e

Da dove stai eseguendo 'menu'? Se non è la stessa directory di "menuScript.sh", si lamenterà di un "comando non trovato". Forse dovresti usare un percorso assoluto?
garethTheRed,

1
@garethTheRed Direbbe./menuScript.sh: command not found
Michael Mrozek

@MichaelMrozek - giusto. Ho appena controllato e ha detto No such file or directory, che non è ancora lo stesso dell'errore del PO. Il punto è ancora valido: sarebbe meglio con un percorso assoluto a meno che l'alias non venga sempre utilizzato solo dalla directory in cui menuScript.shrisiede.
garethTheRed,

1
@ryekayo done :)
Con7e

Risposte:


9

Dovresti provare con alias menu='bash ./menuScript.sh'. Al momento non sono su una macchina Linux, quindi non posso provarlo da solo, ma dovrebbe funzionare. Quando chiami l'alias, non sa cosa fare con il percorso, quindi devi includere bashall'inizio.

E il ripristino del terminale aiuta dopo aver apportato la modifica.


Non capisco quanto sia importante il primo paragrafo - a meno che menuScript.shnon sia stato chmodredatto come eseguibile, nel qual caso il messaggio di errore sarebbe stato "Autorizzazione negata". Ho il sospetto che forzare una rilettura del .bashrcfile sia la risposta. ... ... ... ... ... ... ... PS La shell sa cosa fare del percorso nello stesso modo in cui lo fa se l'utente digita ./menuScript.sh, tentando di eseguire il file.
Scott,

7

Quando lo fai

alias menu='./menuScript.sh'

crei un alias che dice "quel file" ma non dice cosa farne realmente.

Tuttavia, se lo fai

alias menu='source ./menuScript.sh'

o

alias menu='. ./menuScript.sh'

Stai dicendo esegui quel file.


6

Ti sei ricordato di eseguire il sorgente del tuo file ~ / .bashrc dopo aver apportato le modifiche? Perché le modifiche diventano effettive nel file .bashrc dopo aver riavviato il computer o aver semplicemente acquisito il file.


2
Questo tipo di post appare come se fosse più adatto per un commento.
HalosGhost

2
@HalosGhost Come pensi? È la prima cosa che mi viene in mente, causerebbe esattamente questo
Michael Mrozek

@MichaelMrozek, lo consiglio solo perché mi sembra che i post di risposta debbano offrire una soluzione definitiva, ad esempio "Hai dimenticato di procurarti il ​​tuo .bashrc, procedi come segue ...". D'altra parte, chiarire le domande (ad es. "Hai dimenticato di ...?") Sembra più adatto per i commenti. Non ci vorrebbe molto a riformulare per rendere questo post molto più adatto a una risposta.
HalosGhost

Durante il riavvio del computer farebbe il trucco, è sufficiente disconnettersi da tty o dalla sessione (se si utilizza un gestore degli accessi). Se sei loggato in un ambiente grafico e non vuoi source ~/.bashrco . ~/.bashrc, allora puoi semplicemente aprire un'altra shell. E 'così semplice. Nessun riavvio richiesto.
Dylan,

0

Il motivo per cui ha funzionato vimè perché si tratta di un programma già richiamabile senza un percorso diretto. Non devi dire esplicitamente "Voglio che sia eseguito come programma" perché vimgià lo è. È hardcoded nel sistema operativo che quando riceve il comando vim, va ed esegue il file /usr/bin/vio ovunque si trovi il programma reale.


Uh, no, non è codificato nel sistema operativo. Esiste un file chiamato vimdisponibile nel $PATHche può essere un eseguibile binario, uno script eseguibile o anche un collegamento simbolico a un altro programma. Se si rimuove la voce vimperché cessa di essere disponibile per gli utenti.
roaima,

@roaima Volevo dire che chiamare vim è leggermente diverso rispetto a chiamare un programma personalizzato. Capisco, però, cosa stai ottenendo e sono d'accordo
Nathanael Morgan,

Ho una sceneggiatura chiamata ifviche vive nel mio $HOME/bin(che sembra essere nel mio $PATH). Lo uso esattamente nello stesso modo in cui potrei eseguire un file binario installato dal sistema. Non importa davvero che sia un programma personalizzato.
roaima,

0

Ci sono due problemi con l'alias

alias menu='./menuScript.sh'
  1. Richiede di trovarsi in una directory particolare quando si richiama l'alias. Se ti trovi in ​​una directory in cui menuScript.shnon esiste, non sarà possibile eseguire l'alias.

    Sarebbe meglio se menuScript.shdurante la definizione dell'alias fosse specificato l'intero percorso assoluto dello script, ad es

    alias menu="$HOME/local/bin/menuScript.sh"

    o simili.

  2. Come altri hanno già detto, un altro motivo per cui l'alias potrebbe non riuscire è che lo script non è eseguibile o che ha una linea non valida #!. Assicurarsi che lo script sia eseguibile con

    chmod +x menuScript.sh

    e che la prima riga dello script è

    #!/bin/bash

    o qualunque sia il percorso bash(o qualunque shell per cui è scritto lo script) sul tuo sistema.

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.