Erstellen eines Alias ​​für ein Bash-Skript


10

Also habe ich versucht zu experimentieren und ein aliasIn erstellt .bashrc. Wenn ich jedoch den Befehl teste, erhalte ich:

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

Folgendes habe ich in der .bashrcDatei:

# Source global definitions

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

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

Das Lustige ist, als ich den Alias ​​erstellt habe vi, hat es funktioniert. Aber Menü nicht. Ich habe frühere Beiträge auf UnixStackExchange nachgeschlagen und versucht, anderen Beiträgen zu folgen, aber ohne Erfolg. Hat noch jemand Vorschläge?


1
Haben Sie es mit Alias ​​menu = 'bash ./menuScript.sh' versucht? (Ich bin nicht in einem Linux-Computer, kann es nicht testen)
Con7e

Woher führen Sie "Menü"? Wenn es nicht dasselbe Verzeichnis wie 'menuScript.sh' ist, wird ein 'Befehl nicht gefunden' beanstandet. Vielleicht sollten Sie einen absoluten Pfad verwenden?
garethTheRed

1
@garethTheRed Es würde sagen./menuScript.sh: command not found
Michael Mrozek

@ MichaelMrozek - fair. Ich habe es gerade überprüft und es wurde gesagt No such file or directory, was immer noch nicht mit dem Fehler des OP identisch ist. Der Punkt bleibt jedoch bestehen - am besten mit einem absoluten Pfad, es sei denn, der Alias ​​wird immer nur aus dem Verzeichnis verwendet, in dem er sich menuScript.shbefindet.
garethTheRed

1
@ryekayo fertig :)
Con7e

Antworten:


9

Sie sollten es mit versuchen alias menu='bash ./menuScript.sh'. Ich bin derzeit nicht auf einem Linux-Computer, kann ihn also nicht selbst testen, aber er sollte funktionieren. Wenn Sie den Alias ​​aufrufen, weiß er nicht, was mit dem Pfad zu tun ist, daher müssen Sie den basham Anfang einfügen.

Das Zurücksetzen des Terminals hilft nach der Änderung.


Ich verstehe nicht, wie wichtig der erste Absatz ist - es sei denn, er menuScript.shwurde nicht als chmodausführbar ausgeführt. In diesem Fall wäre die Fehlermeldung "Berechtigung verweigert" gewesen. Ich vermute, dass das Erzwingen eines erneuten Lesens der .bashrcDatei die Antwort ist. Es tut , wenn der Benutzer tippt ... ... ... ... ... ... ... PS Die Schale weiß , was auf die gleiche Weise mit dem Weg zu tun ./menuScript.sh- indem man versucht , die Datei auszuführen.
Scott

7

Wenn Sie das tun

alias menu='./menuScript.sh'

Sie erstellen einen Alias, der "diese Datei" sagt, aber nicht sagt, was Sie tatsächlich damit tun sollen.

Wenn Sie dies jedoch tun

alias menu='source ./menuScript.sh'

oder

alias menu='. ./menuScript.sh'

Sie sagen, führen Sie diese Datei aus.


6

Haben Sie daran gedacht, Ihre ~ / .bashrc-Datei nach den Änderungen zu beziehen? Weil die Änderungen in Ihrer .bashrc-Datei wirksam werden, nachdem Sie Ihren Computer neu gestartet oder einfach die Datei bezogen haben.


2
Diese Art von Post scheint für einen Kommentar besser geeignet zu sein.
HalosGhost

2
@ HalosGhost Wie findest du das? Es ist das erste, woran ich auch denken würde, es würde genau das verursachen
Michael Mrozek

@MichaelMrozek, ich schlage dies nur vor, weil es mir so scheint, als ob Antwortbeiträge eine endgültige Lösung bieten sollten, z. B. "Sie haben vergessen, Ihre Quellen zu beschaffen .bashrc, tun Sie Folgendes ...". Auf der anderen Seite scheinen klärende Fragen (z. B. "Hast du vergessen ...?") Eher für Kommentare geeignet zu sein. Es würde nicht viel Umformulierung erfordern, um diesen Beitrag für eine Antwort besser geeignet zu machen.
HalosGhost

Während ein Neustart Ihres Computers ausreicht, müssen Sie sich nur von tty oder Ihrer Sitzung abmelden (wenn Sie einen Anmeldemanager verwenden). Wenn Sie in einer grafischen Umgebung angemeldet, und Sie wollen nicht source ~/.bashrcoder . ~/.bashrc, dann können Sie einfach auch eine andere Shell öffnen. So einfach ist das. Kein Neustart erforderlich.
Dylan

0

Der Grund, warum es funktioniert hat, vimist, dass dies ein Programm ist, das bereits ohne direkten Pfad aufgerufen werden kann. Sie müssen nicht explizit sagen "Ich möchte, dass dies als Programm ausgeführt wird", da dies vimbereits eines ist. Im Betriebssystem ist fest codiert, dass beim Empfang des Befehls vimdie Datei ausgeführt wird /usr/bin/vioder wo immer sich das eigentliche Programm befindet.


Äh, nein, es ist nicht fest im Betriebssystem codiert. Es gibt eine Datei mit dem Namen " vimverfügbar" $PATH, die eine ausführbare Binärdatei, ein ausführbares Skript oder sogar einen Symlink zu einem anderen Programm sein kann. Wenn Sie den Eintrag entfernen, ist er für vimBenutzer nicht mehr verfügbar.
Roaima

@roaima Was ich meinte war, dass das Aufrufen von vim etwas anders ist als das Aufrufen eines benutzerdefinierten Programms. Ich sehe jedoch, worauf Sie hinaus wollen, und stimme zu
Nathanael Morgan

Ich habe ein Skript namens ifvi, das in meinem lebt $HOME/bin(was zufällig in meinem ist $PATH). Ich benutze es genauso, wie ich eine vom System installierte Binärdatei ausführen könnte. Es ist wirklich egal, dass es sich um ein benutzerdefiniertes Programm handelt.
Roaima

0

Es gibt zwei Probleme mit dem Alias

alias menu='./menuScript.sh'
  1. Sie müssen sich in einem bestimmten Verzeichnis befinden, wenn Sie den Alias ​​aufrufen. Wenn Sie sich in einem Verzeichnis befinden, in dem menuScript.shes keinen gibt, kann der Alias ​​nicht ausgeführt werden.

    Es ist besser, wenn Sie menuScript.shbeim Definieren des Alias den vollständigen absoluten Pfad zum Skript angeben , z

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

    o.ä.

  2. Wie andere bereits gesagt haben, ist ein weiterer Grund, warum der Alias ​​fehlschlagen kann, dass das Skript nicht ausführbar ist oder eine ungültige #!Zeile enthält. Stellen Sie sicher, dass das Skript mit ausführbar ist

    chmod +x menuScript.sh

    und dass die erste Zeile im Skript ist

    #!/bin/bash

    oder was auch immer der Pfad zu bash(oder für welche Shell das Skript geschrieben ist) auf Ihrem System ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.