Ich versuche, einen Terminalbefehl zu erstellen. Das habe ich bisher erstellt:
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
Es erstellt zwei Befehle:
Das Problem ist, dass sendtext-remove
ich nach dem Laufen immer noch laufen kann send text
. Wie kann ich das .bash_profile aktualisieren, ohne ein neues Terminalfenster zu öffnen?
Das scheint eine Menge Arbeit zu sein
alias sendtext-remove='unalias sendtext sendtext-remove'
-- versuchen Sie, Ihre Spuren irgendwie zu verwischen, indem Sie die Datei bearbeiten?
Beachten Sie auch, dass "myfile" auf null Bytes gekürztgrep -v foo myfile > myfile
wird ! Das liegt daran, dass die Umleitung zuerst erfolgt und grep dann eine leere Datei hat, mit der es arbeiten kann. Dann bezieht es eine leere Datei und nimmt keine Änderungen an Ihrer aktuell ausgeführten Shell vor.. ~/.bashrc
Grundsätzlich besteht Ihr Problem darin, dass Sie die Aliase in Ihrer aktuellen Shell nicht aufheben.
Ich wollte einige Funktionen für die Installation und Deinstallation aufschreiben, aber ich habe meine Meinung geändert. Ich denke nicht, dass Sie die Punktdateien Ihrer Benutzer für sie bearbeiten sollten. Wenn sie Ihre Sendtext-Funktion wollen, können Sie sie mit ihnen teilen, und wenn sie sie nicht wollen, können sie sie selbst entfernen. Ich würde es jedoch als Funktion schreiben, nur für die Lesbarkeit
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' \
"$@"
}
grep
?echo $(sed '/sendtext/d' .bash_profile) > .bash_profile
echo $(some_command)
alle Zeilenumbrüche aus der Ausgabe von some_command.sed -i ".bak" '/sendtext/d' somefile
wird eine Datei an Ort und Stelle bearbeiten.Sie können das Bash-Profil mit dem folgenden Befehl über die Befehlszeile oder das Skript neu laden:
source ~/.bash_profile
. .bash_profile
(I cd into ~/ schon)
Glen Jackmann
Andreas Mast
Glen Jackmann
sed
stattdessen verwenden)Andreas Mast
sed
? (Ich möchte die Zeilen entfernen, die mein Skript enthalten)Glen Jackmann
kein Hang
mmmmmm
Dan
.bash_profile
ist nicht als Shell-Skript gedacht, schon gar nicht als bewegliches Shell-Skript. Bitte machen Sie eine solche Klarstellung nicht in Kommentaren, sondern in Ihrer ursprünglichen Frage.