GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum erkennt das Bash-Skript keine Aliase?

In meinem ~/.bashrc Datei befinden sich zwei Definitionen:

  1. commandA , was ein Alias ​​für einen längeren Pfad ist
  2. commandB , was ein Alias ​​für ein Bash-Skript ist

Ich möchte dieselbe Datei mit diesen beiden Befehlen verarbeiten, also habe ich das folgende Bash-Skript geschrieben:

#!/bin/bash

for file in "[email protected]"
    do
    commandA $file
    commandB $file
done

Selbst nachdem ich mich von meiner Sitzung abgemeldet und wieder angemeldet habe, fordert Bash mich mit command not found auf Fehler für beide Befehle, wenn ich dieses Skript ausführe.

Was mache ich falsch?

Akzeptierte Antwort:

Zunächst einmal werden, wie ddeimeke sagte, Aliase standardmäßig nicht in nicht-interaktiven Shells erweitert.

Zweitens .bashrc wird nicht von nicht interaktiven Shells gelesen, es sei denn, Sie setzen BASH_ENV Umgebungsvariable.

Aber vor allem:Tu das nicht! Bitte? Eines Tages werden Sie dieses Skript irgendwohin verschieben, wo die notwendigen Aliasnamen nicht gesetzt sind, und es wird wieder kaputt gehen.

Setzen und verwenden Sie stattdessen Variablen als Abkürzungen in Ihrem Skript:

#!/bin/bash

CMDA=/path/to/gizmo
CMDB=/path/to/huzzah.sh

for file in "[email protected]"
do
    $CMDA "$file"
    $CMDB "$file"
done

Linux
  1. Warum zeigt "find" diese Datei nicht an??

  2. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  3. Warum funktioniert das ~/.bash_profile nicht?

  4. Warum führt „sudo Su“ in einem Shell-Skript den Rest des Skripts nicht als Root aus?

  5. Bash-Skript:Prüfen, ob eine Datei eine Textdatei ist?

35 Bash-Skriptbeispiele

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

Warum enthält die Bash-Übersetzungsdatei nicht alle Fehlertexte?

Warum zeigt Ls -l nicht die Uhrzeit und/oder das Jahr für jede Datei an?

Warum kann ich Leerzeichen in einem Bash-Skript nicht maskieren?

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner