エイリアスを自動的に保存できるコマンドラインツール/スクリプトはありますか?例えば
save-alias my-ip="curl ipecho.net/plain"
エイリアスを定義し、~/.bashrc または ~/.zshrc に追加/更新します。
エイリアスを定義してから自動的に保存するスクリプトを作成しようとしています。毎回設定ファイルに別名を手動で追加する必要があるのは面倒です。しかし、私は車輪を再発明しなければならないと思いました、そしてあなたはすでにこの迷惑に対するいくつかの解決策を持っています。
編集:最終的に答えで見つけることができるスクリプトを書いた。
答え1
これは本当に良い考えです。私は次の関数を作成します。
addalias() {
echo "alias ${1}" >> $HOME/.bash_aliases
}
自分のアカウントに追加して.bashrc
ログアウトしてからもう一度ログインしてください。
使用法は次のとおりです。
addalias ..='cd ../../'
答え2
追加してすぐに使用できるようにするには、次の手順に従ってください。
# In your .bashrc or .bash_profile file, add:
newalias() {echo "alias ${1}" >> $HOME/.bash_aliases; source ~/.bash_aliases; }
.bash_aliases
ファイルを使うという意味です。そして.bashrc
orで始まり、.bash_profile
行を使用してください。
. ~/.bash_aliases
一部の人は最初に.bash_aliasesファイルを持っておらず、現在の独自のファイルまたは.bash_aliasesファイルで定義.bashrc
されているエイリアスしか持っていないかもしれません.bash_profile
。>>
ファイルが現在存在しない場合は作成され、それ以外の場合はファイルが追加されるため、まだ機能します。.bash_aliases
しかし、これへの参照を手動で追加する必要があり、現在は既存のエイリアスをその参照に移動することを検討するかもしれません。
答え3
私は結局この台本を書くようになりました。その理由は最後に説明します。
.aliasesファイルに新しいエイリアスを追加してすぐにロードします。重複エントリを 2 回追加しないため、同じエイリアスを複数回定義すると、設定ファイルに重複エントリをスパムに送信するのではなく、以前のバージョンが更新されます。
ALIASES_FILE_PATH=$HOME/.aliases
function save-alias() {
ALIAS_NAME=`echo "$1" | grep -o ".*="`
# Deleting dublicate aliases
sed -i "/alias $ALIAS_NAME/d" $ALIASES_FILE_PATH
# Quoting command: my-alias=command -> my-alias="command"
QUOTED=`echo "$1"\" | sed "s/$ALIAS_NAME/$ALIAS_NAME\"/g"`
echo "alias $QUOTED" >> $ALIASES_FILE_PATH
# Loading aliases
source $ALIASES_FILE_PATH
}
その他のバージョン
別のファイルを別名として使用する代わりに、構成ファイル自体(.zshrcまたは.bashrc)に別名を保存します。また、必要に応じてエイリアスの下に別のコンテンツを保持できるように、設定ファイル内の指定された場所にエイリアスを追加します。 「#END ALIASES」の前にエイリアスが追加されますので、正しい文字列があることを確認してください。たとえば、設定ファイルは次のようになります。
plugins=(git)
#and bla bla bla
# ALIASES
alias test-alias="echo I was added automatically"
# END ALIASES
# Yes you can have the bottom of the config file free.
# Because it will store aliases inside ALIASES block
source $ZSH/oh-my-zsh.sh
# and etc
これは次のコードを使用して行われます。
CONFIG_PATH=$HOME/.zshrc
function save-alias() {
ALIAS_NAME=`echo "$1" | grep -o ".*="`
# Checking whether the alias name is empty.
# Otherwise sed command later will match and delete every alias in the file
if [[ -z "$ALIAS_NAME" ]]; then
echo 'USAGE: save-alias alias_name="command" ' 1>&2
echo ' save-alias hello="echo hello world" \n' 1>&2
echo "Wrong format. Exiting..." 1>&2
exit 1
fi
# Deleting dublicate aliases
sed -i "/alias $ALIAS_NAME/d" $CONFIG_PATH
# Quoting command: my-alias=command -> my-alias="command"
QUOTED=`echo "$1"\" | sed "s/$ALIAS_NAME/$ALIAS_NAME\"/g"`
# Appending the command to the config (before "# END ALIASES")
sed -i "/# END ALIASES/i alias $QUOTED" $CONFIG_PATH
#reloading config file.
source $CONFIG_PATH
# instead of reloading the whole config you might want to append
# to a new file as well, then source it and then rm new file
}
ここで他の解決策が提案されていないのはなぜですか?
echo "alias ${1}" >> $HOME/.bash_aliases
彼らは2つの問題があります。
1. 見積もりが削除されます。
上記のコマンド(「save-alias」と表示されている)を使用すると、次のコマンドは失敗します。
save-alias test-alias="echo hello world"
引用符が削除され、次のコマンドが追加されるため失敗します。
alias test-alias=echo hello world
次のエラーで失敗します。
bash: alias: hello: not found
bash: alias: world: not found
解決策は二重引用符を使用することです。
save-alias test-alias='"echo hello world"'
これは少し迷惑です。
2. 重複項目を追加します。
コマンドを 2 回実行すると、同じエイリアスが構成ファイルに 2 回追加されます。
alias test-alias="echo hello world"
alias test-alias="oh no the config file is getting spammed"