2016-08-22 20 views
0

この関数でエイリアスを再定義できるようにします。bashエイリアスの再定義

私はこれを試してみましたが、これは簡単に同じ名前の関数で新しいエイリアスを定義することで実現できます(下記の例を参照)。

しかし、私はこれが正しい方法であることを非常に疑う。同じ結果を達成するためのベストプラクティスは何でしょうか?

コード例:

#!/bin/bash 
# alias.sh 

shopt -s expand_aliases 
# Must set this option, else script will not expand aliases. 

alias testal="echo 1" 
testal 


settestal() { 
    echo "in f: call testal" 
    testal 
    echo "in f: redefine" 
    alias testal="echo '2'" 
    echo "in f: call testal" 
    testal 
    echo "in f: end f" 
} 

settestal 

testal 

その結果、1は見るでしょう:

1 
in f: call testal 
1 
in f: redefine 
in f: call testal 
1 
in f: end f 
2 
+0

行う理由あなたはそれが正しくないと思いますか? –

+0

...ここで珍しいのは、関数だけではなく、エイリアス*を使用することです。 –

+0

これは正しい方法だと思いませんか?何が良いでしょうか? – Barmar

答えて

2

を何もこのことについて間違ってどのような方法、そして私はあなたの実践を呼びたいするだけに関してはありません疑わしいのは、非対話的なコンテキストでエイリアスを使用することです。

エイリアスは、ベースラインのPOSIX sh標準の現在の()の一部ですが、ほとんどの標準では(オプションの)ユーザポータビリティユーティリティ拡張または完全に特定されていません。比較のために


、同等の使用機能 - あなたは注意しましょう、単にあなたがすでに別名でやっているとおりに、同じ名前の新しい定義を提供します。

testal() { echo 1; } 
testal 

settestal() { 
    echo "in f: call testal" 
    testal 
    echo "in f: redefine" 
    testal() { echo 2; } 
    echo "in f: call testal" 
    testal 
    echo "in f: end f" 
} 

settestal 
testal 
+0

私はいくつかの作業プロジェクトを持っているので、このようなやり方をしたいと思っています。それらのすべてについて、同様の作業ツールを定義したいと思います。しかし、これらのツールの定義は現在の作業プロジェクトの構成に依存しています。エイリアスを再定義することが私の心に入った最初のものでした。 – greyxray

+0

それは、それがどんなディレクトリにあるのかを調べる機能を持たないのですか? –

+0

私の動機は、各エイリアスにかなり少数のコマンドをグループ化するためです。私が可能な各ディレクトリに対してif文を使って関数を使用すると、コードサイズは非常に高速になります。今の私の状況では、私は機能に切り替えることができます(と私は、ありがとう)が、私はディレクトリ/プロジェクトの多くが問題になる可能性があります。それとも間違っていると思いますか? – greyxray