web-dev-qa-db-ja.com

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

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

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

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

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

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

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

373
Bakhtiyor

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

gedit ~/.bashrc

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

alt text

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

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

alt text

421
karthick87

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

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

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

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

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

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

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

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

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

    alias cs='cd;ls'
    
250
aneeshep

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

source ~/.bashrc

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

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

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

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

19
Marty Fried

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

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
17
João Pinto
echo "alias vps='ssh -X [email protected]'" >> ~/.bashrc

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

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

7
user80638

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はあなたのドットファイルを自動ソースします。見てみな。

5
ytbryan

新しいエイリアスをすばやく作成し、エイリアス定義を~/.bash_aliases(存在する場合)または~/.bashrc

TIP~/.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"
}
4
blizzrdof77

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

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

alias ok="ping google.com"

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

0
Fahad Ahammed

私が思い出すように、bashrcにはエイリアスに直接使用しないことを示唆する行があります。 solution は、外部ファイルを使用することです。 fooおよびbarエイリアスが追加されましたが、bazを追加するには、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 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エイリアスが機能するようになりました。以前の回答には 言及 このテクニックがあったが、彼らは導線を埋めていたことがわかった。

0
Thufir