永続的なBashエイリアスを作成するにはどうすればよいですか?


382

rmこのコマンドの実行後に確認メッセージを表示するために、コマンドのエイリアスを作成したいと思います。だから私はこのようなエイリアスを作成していalias rm='rm -i'ます。しかし、私が知る限り、これは一時的なエイリアスであり、ターミナルを閉じるまで存続します。

エイリアスを永続的に保存するためにここで説明さているように、ターミナルでコマンドを実行する~/.bash_aliases~/.bashrc、そこにエイリアスを追加する必要があります。しかし、実行する~/.bashrcと次のエラーメッセージが表示されます。

bash: /home/bakhtiyor/.bashrc: Permission denied

実行する~/.bash_aliasesと、次のような別のエラーメッセージが表示されます。

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.

実際の問題とは何か、どうすれば解決できますか?



alias rm='rm -i'はrmを無計画に使用する問題を解決しません
qwr

回答:


429

エイリアスを永久に作成するには、エイリアスを.bashrcファイルに追加します

gedit ~/.bashrc

そして、下部にエイリアスを追加します。

代替テキスト

. ~/.bashrcターミナルで実行します(.との間にスペースが必要~/.bashrcです)。

これで、エイリアスを確認できます。

代替テキスト


5
@ karthick87あなたが「今実行端末で〜/ .bashrcのを(と〜/ .bashrcの間に隙間がなければならない。。。」を書いたのはなぜこのステップが必要とされている。?
オタク

5
最初の「。」は何ですか で行う。〜/ .bashrc?
禅14

22
@Geek @Zen "Execute"は正しい用語ではありませんでした。ドットはと同等sourceです。を使用して. ~/.bashrc、bashをソースします。ファイルを実行すると、子プロセスが開始され、このプロセスでコマンドが実行されてから戻ります。子プロセスで行われるすべての処理は、親プロセス(実行元のbash)には影響しません。代わりに、ソース(ドットを使用)は、ターミナルでファイルのコンテンツを作成した場合とまったく同じように機能します。これはあなたが望むものです。.bashrcbashを開始するたびにソースされます。変更を加えた場合、新しいbashまたはソースを手動で開始するまで、変更は適用されません。
ゴーティエ14年

@ButtleButkus-システム全体ではなく、1人のユーザーの設定のみを変更する場合があります。Ubuntuでは、システム全体の.bashrcファイルは/etc/bash.bashrc
WillC

1
@ShubhamA。OSXの動作については、この質問をご覧ください
-jandersen

253

エイリアスを作成する方法はたくさんあります。最も使用される方法は次のとおりです。

  1. ~/.bashrcファイルにエイリアスを直接追加します

    例:これらの行を~/.bashrcファイルに追加します

    alias ll='ls -l'
    alias rm='rm -i'

    次回(ログアウト/ログイン、またはdoneの後. ~/.bashrc)コマンドを入力するとrmrm -iコマンドが実行されます。

  2. 2番目の方法では、別のエイリアスファイルを作成できるため、それらをに入れる必要はなく.bashrc、選択したファイルに入れる必要があります。まず、~/.bashrcファイルを編集して、まだ存在しない場合は次の行を追加し、存在する場合はコメントを外します。

    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi

    保存してファイルを閉じます。その後、あなたがしなければならないことは~/.bash_aliases、最初の方法で指定されたのと同じ形式で、ファイルを作成し、そこにエイリアスを追加することです。

    私の~/.bash_aliasesファイルの内容:

    alias cs='cd;ls'

72
を使用する場合は+1 ~/.bash_aliases
アーンドリューク

うん、エイリアスに別のファイルを使用する方がずっときれいで、ディストリビューション間でも移植できます。一部のエイリアスでは不十分で、関数が必要なため、このファイルを使用します。そのため、代わりにそのタスクにファイルを使用すると、よりクリーンになります。別のエイリアス-> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases"があるので、保存時にエイリアスが使用可能になります。間違えた場合は警告が表示されます。
erm3nda

どういうわけか、などのエイリアスを追加した後alias ls='ls -althr'、指定されたフラグの一部が有効になりません。この場合、-tフラグは有効になりませんでした。なぜなのかご存知ですか?
Sajuuk

3
デフォルトで~/.bashrcはの包含が含まれて~/.bash_aliasesおり、編集する必要はありません。
ジャッコ

1
〜/ .bashrcに〜/ .bash_aliasesが含まれているとは限りませんが、Ubuntu端末Windows 10の場合はこのソリューションが非常に便利でした。
ホセ

19

あなたの唯一の問題は、実行可能でないときに単に.bashrcを実行しようとしているように思えます。しかし、これは正しい方法ではありません。このファイルを変更するたびに、次のコマンドで「実行」する必要があります。

source ~/.bashrc

それ以外の場合は、新しいシェルを作成し、新しいシェルの環境でファイルを実行し、終了時にその環境を破棄するため、変更が失われます。スクリプトをソースすることにより、現在のシェル内で実行されるため、スクリプトは引き続き有効です。

2番目のエラーは、bash_aliasesが存在しないためだと思います。必須ではありません。変更を個別に整理して整理することをお勧めします。存在する場合にのみ使用され、.bashrcでテストを確認できます。

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

これは、ファイル〜/ .bash_aliasesが存在する場合、それを実行することを示しています。


~/.bash_aliases優れている。askubuntu.com/questions/194111/...
tomByrer

1
sourceコマンドを使用すると、エイリアスが機能しました。+1
dspacejs

4
完全を期すために:行の最初のドットは. ~/.bash_aliases、シェルの組み込みコマンドと同じ意味を持ちsourceます。これが正しい答えであり、何が起こっているのかを説明しています。
メレビウス

17

問題は、非実行可能ファイルを実行しようとしていることです。これは次の方法で確認できます。

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc

最初の列には「x-実行可能」文字がないことに注意してください(ファイルのアクセス許可)。

プロファイルファイルは実行可能ファイルではありません。実行する代わりに、以下を使用してロードします。

source /home/bakhtiyor/.bashrc

または

. /home/bakhtiyor/.bashrc

7
echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc

これは私が探していた例です。ターミナルにいくつかの文字(「vps」)を入力してリモートでサーバーにログインし、X11転送を有効にして、「gedit」などのGUIアプリをネットワーク上で実行できるようにします。

コマンド/エイリアスコマンドが何であれ、エコーステートメント、引用符、およびコマンドの出力をファイルに追加するための記号(>>)を使用するこの方法は、私にとってはうまくいきます。必要なエイリアスコマンドのコマンドを置き換えて、ターミナルに入力するだけです。


ここでの引用は少し注意が必要です。この例では、二重引用符の使用は問題ありませんが、引用符内のテキストにドル記号やバックスラッシュなどが含まれている場合、シェルが二重引用符内でそれらを処理する方法を理解する必要があります。外側を一重引用符に、内側を二重引用符に切り替えることができますが、エイリアス定義でBashが二重引用符を処理する方法を理解する必要があります。
トリプリー

5

rubyを使用している場合は、rubygemを使用して別名をインストールできます。

gem install aka2

使用法

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people

あなたが必要としないように、rubygemはあなたのドットファイルを自動ソースします。見てみな。


4

新しいエイリアスをすばやく作成し、エイリアス定義~/.bash_aliases (存在する場合)またはに書き込むために、この便利な関数を作成しました~/.bashrc

ヒント~/.bash_aliasesが存在することを確認し、で実行され~/.bashrcます。

# -----------------------------------
#  Create a new permanent bash alias
#
#  @param $1 - name
#  @param $2 - definition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME already exists - continue [y/n]?" && read YN
    case $YN in
      [Yy]* ) echo "okay, let's proceed.";;
      [Nn]* ) return;;
      * ) echo "invalid response." && return;;
    esac
  fi

  if [ -z "$2" ]; then
    echo "alias definition:" && read DEFINTION
  else
    DEFINTION="$2"
  fi

  if [ -f ~/.bash_aliases ]; then
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
  else
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
  fi

  alias $NAME="$DEFINTION"
}

1
良い考えですが、この関数を不注意に使用すると.bashrcaliasコマンドの複数のインスタンスでトラッシュが発生する場合があります。このような混乱を避けるために、関数には必ずいくつかの検査を実装する必要があります。
Troublemaker-DV

これは有効なポイントです。@ Troublemaker-DVを共有しても構わない回避策はありますか?
blizzrdof77

それがまだ実際の2 1 / 2yo後であるかどうかは不明ですが、...重複を避けるために、このエイリアスが既にそこに入力されているかどうかを確認するために、最初にエイリアスコマンドのRCをgrepします。RCはすでに同じ名前の複数のエイリアスで「汚染」されている可能性があるため、エイリアスの存在を確認するだけでは十分ではありません。
Troublemaker-DV

0

私は使用することをお勧めします /etc/bash.bashrc

そのファイルの最後に行を追加できます。

alias ok="ping google.com"

エイリアスを行ごとに入力した後、再起動または再ログインする必要があります。


7
「..」を提案しますが、なぜそれを提案しますか?
ムル

2
すべてのユーザーにシステム全体の設定をインストールする場合を除き、システムファイルをいじらないでください。パーソナルシステムでは、違いはわずかですが、システムファイルをいじることは今後さらに複雑になるため、個人の好みに合わせて独自のドットファイルを選択することをお勧めします。未来も)。
トリプリー

1
リブート?それは本当にひどいアドバイスです。特にsource /etc/bash.bashrcこの例であなたが望むすべてのことをするとき、それをしないでください。しかし、使用するべき~/.bashrcか、~/.bash_aliases代わりに
Xen2050

@ Xen2050、再起動/再ログイン後に機能することを示すために再起動することをお勧めします。ちなみに、別のきれいな端末ウィンドウでも動作します。
ファハドアハメッド

1
再起動せずに新しいカーネルにアップグレードできます。これは古いウィンドウではありません;-)
Xen2050

0

私が思い出すように、bashrc持っている、または持っていた、エイリアスのためにそれを直接使用しないことを示唆する行。解決策は、外部ファイル(複数可)を使用することです。fooそしてbarエイリアスが追加されていますが、追加する(ちょうど新しいターミナルを開き、)のファイルは、「調達」しなければなりません。例:bazbashrc

thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ cat .bash_aliases 
alias foo='echo foo'
alias bar='echo foo'
alias baz='echo baz'

thufir@dur:~$ 
thufir@dur:~$ source .bashrc 
thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias baz='echo baz'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ baz
baz
thufir@dur:~$ 

これでbazエイリアスが機能します。前回の回答でこの手法について言及されていたが、彼らは導線を埋めていたことに気付いたのです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.