2012-11-06 6 views
20

私は以下のエイリアスがあるとします。bashエイリアスがシェル起動時の文を評価しないようにする

alias pwd_alias='echo `pwd`' 

このエイリアスは「動的」ではありません。シェルが起動するとすぐにpwdと評価されます。エイリアスの実行時まで、ティックの式の評価を遅らせるにはどうしようもありませんか?

+9

一重引用符はそれを行う必要があります(私のシステム上で行います)。 –

+1

'エイリアスpwd_alias = 'エコー$ PWD'' –

答えて

24

本当に必要なのは、別名ではなく機能です。

pwd_alias() { 
    echo "$PWD" 
} 

エイリアスは、テキストを置き換えるだけです。複雑さを伴うものはすべて、関数を必要とします。

+0

エイリアスとして動作させるには、この関数をどこに配置しますか?/usr/local/binにあるファイル、または.bashrcのように置くことができますか? – dgilperez

+2

@dgilperez '〜/ .bashrc'は問題ありません。 – jordanm

+0

この関数の構文は私のためには機能しませんでした。私は 'function pwd_alias { echo" $ PWD " }' –

0

評価をシェルの開始時に変更することはできないと思います。エイリアスを作成するプロセスはシェルの起動時に実行されるため、pwdが評価されます。単純にエイリアスを変更してpwdをバックティックなしで実行し、pwd出力をエコーする必要はありません。これを解決する簡単な方法は、エイリアスの使用を変更したくない場合は、パス内のエイリアスをシェルスクリプトに変更することです。

#!/bin/bash 
pwd 
2

jordanm氏によると、エイリアスはテキストを置き換える以外に何もしません。
echoの引数をbashによって展開されたpwdの出力にしたい場合は、あなたの質問を理解できません。

alias a="echo '\`pwd\`'" 

ので、代わりにエコーのあなたは、独自にバッククォート展開を行い、何かを持っている場合:
あなたは、エコーの引数はバッククォートと `pwd`はなりたい場合は、それは例えば、実際に可能ですが、保管しましたランタイム、おそらくそれはあなたが望むものです。

+3

上記は機能しません。一重引用符を削除する必要があります: 'alias a =" echo \\ 'pwd \\' "' – Anake

+0

これは、意図したとおりに動作します。シェルを呼び出すと 'pwd'バッククォートを保持しています。 –

関連する問題