web-dev-qa-db-ja.com

エイリアスを〜/ .bashrcまたは〜/ .zshrcに自動的に配置します

エイリアスを自動的に保存するコマンドラインutil/scriptはありますか?例えば。

save-alias my-ip="curl ipecho.net/plain"

これでエイリアスが定義され、〜/ .bashrcまたは〜/ .zshrcで追加/更新されます。

エイリアスを定義して自動的に保存するスクリプトを書くことを考えていました。設定ファイルに毎回手動でエイリアスを追加しなければならないのは面倒です。しかし、おそらく私は車輪の再発明をするつもりであり、皆さんはすでにこの煩わしさに対するいくつかの解決策を持っていると思いました。

編集:私はあなたが答えで見つけることができるスクリプトを書くことになった。

4
Don Manley

私はこのスクリプトを書くことになりました。最後にその理由を説明します。

.aliasesファイルに新しいエイリアスを追加し、すぐにロードします。重複を2回追加することはないため、同じエイリアスを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" 
1
Don Manley

追加してすぐに利用できるようにするには:

# In your .bashrc or .bash_profile file, add:
newalias() {echo "alias ${1}" >> $HOME/.bash_aliases; source ~/.bash_aliases; }

これは、.bash_aliasesファイルを使用することを意味しますおよび.bashrcまたは.bash_profileからソースを取得します。

. ~/.bash_aliases

一部の人々は、最初は.bash_aliasesファイルを持っておらず、現在.bashrcまたは.bash_profileでエイリアスが定義されているだけかもしれません。 >>が現在存在しない場合は.bash_aliasesファイルを作成するため、これは引き続き機能します。存在しない場合は、ファイルに追加されます。ただし、参照を追加する手動の手順を実行する必要があり、その時点で既存のエイリアスを移動することを検討することもできます。

2
Michael Durrant

それは実際には素晴らしいアイデアです。関数を作成します:

addalias() {
    echo "alias ${1}" >> $HOME/.bash_aliases
}

これを私の.bashrcに追加し、ログアウトして再度ログインします。

使用法は次のとおりです。

addalias ..='cd ../../'
1
Willian Paixao