.bash_profile non si sta aggiornando fino all'apertura di una nuova finestra di Terminale

2

Sto cercando di creare un comando Terminale. Ho creato questo finora:

cd ~/ && touch .bash_profile && echo "" >> .bash_profile && echo "alias sendtext=\"osascript -e 'on run argv' -e 'tell application \\"Messages\\"' -e 'set myid to get id of first service' -e 'set address to item 1 of argv' -e 'set message to item 2 of argv' -e 'set receiver to buddy address of service id myid' -e 'send message to receiver' -e 'end tell' -e 'end run'\"" >> .bash_profile && echo "alias sendtext-remove=\"cd ~/ && grep -vwE \\"(sendtext|sendtext-remove)\\" .bash_profile > .bash_profile && . .bash_profile\"" >> .bash_profile && . .bash_profile

Crea due comandi:

  • sendtext [email] [messaggio] (Invia un messaggio di testo per email)
  • sendtext-remove (Rimuove le due linee da .bash_profile)

Il problema è che dopo aver eseguito sendtext-remove , posso ancora eseguire send text . Come posso aggiornare .bash_profile senza aprire una nuova finestra di Terminale?

    
posta Andrew Mast 04.03.2016 - 22:48
fonte

2 risposte

2

Sembra un sacco di lavoro per

alias sendtext-remove='unalias sendtext sendtext-remove'

- stai cercando di coprire le tue tracce in qualche modo modificando il file?

Nota inoltre che grep -v foo myfile > myfile sarà troncato "myfile" a zero byte! Questo perché il reindirizzamento avviene prima e quindi grep ha un file vuoto con cui lavorare. Quindi . ~/.bashrc sta creando un file vuoto e non apporta modifiche alla shell attualmente in esecuzione.

Fondamentalmente, il tuo problema è che non annulli l'alias degli alias nella tua shell corrente.

Stavo per scrivere alcune funzioni per l'installazione e la disinstallazione, ma ho cambiato idea. Non penso che dovresti modificare i dotfiles dei tuoi utenti per loro. Se vogliono che la funzione sendtext sia condivisa con loro, e se non la vogliono, possono rimuoverla da soli. Lo scriverei comunque come una funzione, solo per la leggibilità

sendtext() {
    osascript -e 'on run argv' \
              -e 'tell application "Messages"' \
              -e 'set myid to get id of first service' \
              -e 'set address to item 1 of argv' \
              -e 'set message to item 2 of argv' \
              -e 'set receiver to buddy address of service id myid' \
              -e 'send message to receiver' \
              -e 'end tell' \
              -e 'end run' \
              "$@"
} 
    
risposta data 04.03.2016 - 23:22
fonte
1

Puoi ricaricare il profilo bash da riga di comando o script con il seguente comando:

source ~/.bash_profile
    
risposta data 04.03.2016 - 22:59
fonte

Leggi altre domande sui tag