.bashrc ładuje aliasy z innego pliku

11

Mam plik .bashrc, który chcę skonfigurować, aby odczytywał aliasy z pliku .aliases i ustawiał je.

Obecnie mam:

# User specific aliases and functions
while read alias_line
do
        echo `alias ${alias_line}`
done < .aliases

Ale po zalogowaniu otrzymuję:

-bash: alias: -fu: nie znaleziono -bash: alias: $ USER ": nie znaleziono

-bash: alias: -lart ": nie znaleziono

Plik .aliases wygląda następująco:

psu = "ps -fu $ USER" ll = "ls -lart"
pico = 'nano'

Vladimir
źródło

Odpowiedzi:

13

Kiedy używasz alias ${alias_line}, zmienna jest dzielona na spacje, ignorując reguły cytowania.

Istnieją dwa sposoby, aby to naprawić:

  • Usuń wszystkie cytaty z pliku aliasu:

    ll=ls -lart
    psu=ps -fu $USER
    

    i umieść samą zmienną w cudzysłowach:

    alias "$alias_line"

    Działa to, ponieważ w bash, ll="ls -lart"i "ll=ls -lart"są dokładnie równoważne.

  • Alternatywnie (jest to lepszy i bardziej powszechny sposób), miej plik z aliaspoleceniami i użyj .wbudowanego (aka source), aby go zaimportować.

    alias pico='nano'
    alias psu='ps x'
    alias ll='ls -lart'
    

    następnie w ~/.bashrc:

    . ~/.aliases

Druga metoda jest lepsza , ponieważ nie ogranicza cię do aliasów, ale umożliwia także definiowanie funkcji , które są znacznie potężniejsze.

użytkownik1686
źródło
Zgadza się. To było całkowicie niewłaściwe podejście. Zrobiłem to sam, używając tych poleceń: podczas odczytu linii; wykonaj echo „alias $ line” >> .aliases_full; zrobione <.aliases Następnie zrobiłem mv .aliases_full .aliases. ./.aliases #in .bashrc W każdym razie dzięki :)
Vladimir