2011-03-09 15 views
28

〜〜.bashrcでは、いくつかのエイリアスを定義しました。しかし、他のシェルスクリプトでは使用できません。ここで定義されているエイリアスしか使用できません。私がbashrcを提供したとしても、それはまだ動作しませんでした。私は何をすべきか?他のスクリプトで.bashrcで定義されたエイリアスを使用する方法?

PS。私はbashにいる。

+2

これらのエイリアスを '.bashrc'スクリプトの残りのものと区別するための方法として、あなたのエイリアスを自分のファイルに分離することもできます(' $ HOME /。エイリアスや何か)、 'shopt'と' source'をあなたの他のシェルスクリプトと '.bashrc'から取得します。これは '.bashrc'で他のものから起こり得る副作用を避け、簡単なメンテナンスのためにそれらを単一の場所に保持します。 –

+0

それ以外の場合は、実行してサブ・シェルを生成することを避けることができます。 ./my-script.shに設定されているすべてのエイリアス。bashrcは特別な設定をせずにスクリプトで利用できます。 – anubhava

+0

追加エイリアスファイルで動作します!しかし、なぜそれはbashrcで動作しないのですか? – Dutor

答えて

24

~/.bashrcのソースに加えて、shopt -s expand_aliasesのスクリプトを実行する必要があります。

+2

スクリプトを修正できないのはどうですか? –

+9

@iuliux:代わりに関数を定義してエクスポートします。あなたのスクリプトが '-i'や' -v'を使わずに 'mv'を使っていて、それらを追加したいが、スクリプトを変更することはできないとしよう。 'function mv(){コマンドmv -iv" $ @ "; }; export -f mv'これでスクリプトはそれらのオプションを使用します。これは、よく書かれたスクリプトが実行ファイルへの絶対パスを使用する理由です(例えば、 '/ bin/mv')。このテクニックが動作しないようにし、セキュリティ上の良い習慣です。質問を新しい質問として投稿してください。回答として投稿します。 –

2

私はこの問題を抱えていましたが、このコマンドでファイルをリロードして修正しました。 BASH_ENV変数を使用することにより:

$ source ~/.bashrc 
+0

これは私のために働いていません! – Meliodas

0

は、実行の各スクリプトに行を追加することなく、グローバルに行う方法があります。ここで

は、OS X 10.8.5のための私の設定です:

/etc/launchd.conf:〜/ .bash_profileの

setenv BASH_ENV /Users/DK/.env 

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

# == 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] 
1

盗難enzotib on ask ubuntu:エイリアスはシェル関数のために推奨されていません。

For almost every purpose, aliases are superseded by shell functions.

関数を作成し、サブシェルにエクスポートし、あなたの~/.bashrcに次のように置くために:bashマニュアルページから

petsc() { 
    ~/petsc-3.2-p6/petsc-arch/bin/mpiexec "[email protected]" 
} 
export -f petsc 

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

+0

エイリアスがbashから廃止されると言っているとの記載がありますか?それは正しいことではありません。 – Xen2050

+0

上記の引用はOS Xのマニュアルページからのものです。 "supersede"と書かれていますが、私は "非推奨"と言いました。たぶんその言葉遣いの問題ですが、彼らは物事をするのが好ましい方法ではないように思えます。 – Trenton

+0

Debianのmanページにも同じことが書かれていますが、わかりませんが、エイリアスと関数の名前が同じであれば、関数は優先されますが、関数は作成できませんエイリアスと同じ名前ですが、関数の名前でエイリアスを作成してエイリアスのみを実行することができます)ので少し曖昧です。 「この機能は推奨されておらず、後のバージョンでは削除されます」のように、「廃止予定」の単語が目立つようになりました。エイリアスの場合はそうではありません – Xen2050

0

最も簡単な答えは、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 
0

.bashrcは、一つの目的のためのものです:あなたの対話型シェルのための環境を構成します。 .bashrcと他のスクリプトの間で共有したいコードがある場合は、.bashrc.bashrcの各とシェルスクリプトをソースとする別々のファイルに所属しています。

関連する問題