web-dev-qa-db-ja.com

他のスクリプトで.bashrcで定義されたエイリアスを使用するにはどうすればよいですか?

〜/ .bashrcで、いくつかのエイリアスを定義しました。しかし、他のシェルスクリプトでは使用できません。そこでは、そこで定義されているエイリアスしか使用できません。 bashrcを入手したにもかかわらず、それでも機能しませんでした。私は何をすべきか?

PS。私はbashにいます。

29
Dutor

shopt -s expand_aliasesを調達することに加えて、スクリプトで~/.bashrcを実行する必要があります。

28

この問題が発生したので、このコマンドを使用してファイルをリロードして修正しました。

$ source ~/.bashrc 
2
squirtleBoy

enzotib on ask ubuntuから盗まれました:エイリアスは非推奨になり、シェル関数が優先されます。 bashのマニュアルページから:

ほとんどすべての目的で、エイリアスはシェル関数に置き換えられます。

関数を作成してサブシェルにエクスポートするには、~/.bashrcに次のように入力します。

petsc() {
    ~/petsc-3.2-p6/petsc-Arch/bin/mpiexec "$@"
}
export -f petsc

次に、スクリプトからコマンドを自由に呼び出すことができます。

1
Trenton

最も簡単な答えは、2つの重要なことを実行することです。そうしないと、機能しません。

#!/bin/bash -i

# Expand aliases defined in the Shell ~/.bashrc
shopt -s expand_aliases

この後、〜/ .bashrcで定義したエイリアスは、シェルスクリプト(giga.shまたはany.sh)で、およびそのようなスクリプト内の任意の関数または子シェルで使用できるようになります。

そうしないと、エラーが発生します。

your_cool_alias: command not found
1
Arun Sangal

実行する各スクリプトに行を追加せずにグローバルに実行する方法があります。BASH_ENV変数を使用することです。

OS X10.8.5のセットアップは次のとおりです。

/etc/launchd.conf:

setenv BASH_ENV /Users/DK/.env

〜/ .bash_profile:

# == Bash setup for interactive shells ==    
# === Environment for all shells ===
. $BASH_ENV    
# [skipped]

〜/ .env:

# == Setup for all shells ==
# This is executed for all interactive and for non-interactive shells (e.g. scripts)

shopt -s expand_aliases extglob xpg_echo

# [skipped] Misc. variables and PATH setup

# === General aliases ===

alias pause='echo "Press [Return] or [Enter] to continue..."; read' # read -p does not display Prompt in Eclipse console

# [skipped]
0
DKroot

.bashrcは、インタラクティブシェルの環境を構成するという1つの目的を目的としています。 .bashrcと他のスクリプトの間で共有したいコードがある場合、それは.bashrcとシェルスクリプトのeachによって供給される別のファイルに属します。

0
chepner