2 votos

.bash_profile no se actualizará hasta que se abra la nueva ventana de la Terminal

Estoy tratando de crear un comando de la Terminal. Ya lo he creado hasta ahora:

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 dos comandos:

  • sendtext [email] [message] (Envía un mensaje de texto a un email)
  • sendtext-remove (Quita las dos líneas del .bash_profile)

El problema es que después de que corra sendtext-remove Todavía puedo correr. send text . ¿Cómo puedo actualizar el .bash_profile sin abrir una nueva ventana de la Terminal?

0 votos

Parece un alias útil. ¿Por qué intentas eliminarlo?

0 votos

@glennjackman Estoy intentando que sea desinstalable.

0 votos

En ese caso, yo pondría tus alias (yo usaría funciones) en un archivo separado, y editaría el perfil de bash para leerlo. Además, si al desinstalar tu código se borrara mi .bash_profile, tendrías un cliente muy enojado -- ten más cuidado al eliminar ese código (usa sed en su lugar)

2voto

Mark Puntos 6

Eso parece un montón de trabajo para

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

-- ¿intentas cubrir tus huellas de alguna manera editando el archivo?

También hay que tener en cuenta que grep -v foo myfile > myfile será truncar "mi archivo" a cero bytes! Eso es porque la redirección ocurre primero y luego grep tiene un archivo vacío con el que trabajar. Luego . ~/.bashrc está buscando un archivo vacío y no hacer cambios a su actual casco.

Básicamente, su problema es que no unifica los alias de su actual caparazón.


Iba a escribir algunas funciones para instalar y desinstalar, pero he cambiado de opinión. No creo que debas editar los archivos de puntos de tus usuarios para ellos. Si quieren tu función de envío de texto puedes compartirla con ellos, y si no la quieren, pueden eliminarla ellos mismos. Yo lo escribiría como una función, sólo para que sea legible.

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' \
              "$@"
}

0 votos

¿Funcionaría esto en lugar de grep ? echo $(sed '/sendtext/d' .bash_profile) > .bash_profile

0 votos

No. El mismo problema que antes: la redirección destruye el archivo antes de que se inicie echo / sed. También esta forma echo $(some_command) eliminará todas y cada una de las nuevas líneas de la salida de some_command.

0 votos

Sed: compruebe su página man de sed -- un ejemplo: sed -i ".bak" '/sendtext/d' somefile editará un archivo en el lugar.

2voto

Ben L. Puntos 336

Puedes recargar el perfil de bash desde la línea de comandos o script con el siguiente comando:

source ~/.bash_profile

1 votos

Básicamente estoy haciendo eso con . .bash_profile (Ya he entrado en ~/)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X