2016-05-21 8 views
2

私は部門別の.bashrcファイルにエイリアスを定義しています。このファイルは、個々のユーザー.bashrcファイルの前にソースされています。個々のユーザー.bashrcファイルで、既存のエイリアスにオプションを追加したいと考えています。ですから、例えば、私は次のことを持っている最初の(部門).bashrcファイル内:.bashrcファイルのエイリアスを動的に更新する方法は?

alias my_command = '/usr/local/bin/my_command -option1 -option2' 

私は、例えば、既存のエイリアス上に構築したいユーザー.bashrcファイルで書かれたよう

alias my_command = 'my_command -option3' 

、ユーザー.bashrcファイルに別名命令は、単に部門.bashrcファイルで定義された同じ名前のエイリアスを置き換えます。私は、次の方法でこれを回避しようとした:配列の最初の4つの要素内の単語を返すmy_command、エイリアスされ、かつへ

existing_alias_components=($(type my_command)) 

を。私は最初を囲む引用符という事実と挑戦に実行しているし、コマンドに

alias my_command="$string -option 3" 

を発行 - $stringを言う - 私は、残りの配列要素を取り込むバック文字列にそれらを結合したいですエイリアスの定義は、最初の4つの後の最初と最後の配列値に入っています。私はそれらを部分文字列にすることができますが、perlの中で1つのライナーとなるものはたくさんの作業になりつつあります。これを達成するためのより適切な方法がありますか?

ありがとうございます!

私は単に単一引用符の間から別名値を抽出したい
+3

この関数を使用したくないですか? –

+1

パスをあらかじめ解決したいのはなぜですか?シェルはPATHルックアップをキャッシュします。そのため、パフォーマンスの向上はありません。 –

答えて

1

oldalias=$(alias my_command|sed "s/^[^']*'//; s/'$//"); 

をしてから

alias my_command="$oldalias -option 3" 
+0

優秀な方々、お返事いただいた皆様のおかげで、皆非常に洞察力のあるフィードバックをいただき、大きな説明をいただきました。大変感謝しています! – rbaumann

2

ではなく、機能の使用を検討してください。例えば:付加する、新しい引数

# add a 3rd option on the end: 
my_command_args+=(-option-3) 

を...または:

# add a 0th option on the beginning 
my_command_args=(-option0 "${my_command_args[@]}") 

大きな利点を

my_command_args=(-option1 -option2) 
my_command() { 
    command my_command "${my_command_args[@]}" "[email protected]" 
} 

を...その後誰かが実行することができますここでは、安全に引用することなくエイリアスにデータを追加することができます。

# ...can make it safer this way, if using an alias 
bad_string='$(rm -rf /tmp)' 
printf -v bad_string_safe %q "$bad_string" 
alias my_command="$oldalias --fail-if-command-contains=$bad_string_safe" 

...しかし、それは完全に安全で次のようになります。printf '%q'のようなものを介して実行される代わりに、必要...

# This is evil 
bad_string='$(rm -rf /tmp)' 
alias my_command="$oldalias --fail-if-command-contains=$bad_string" 

:たとえば、以下の別名を持つ非常に悪いニュースだろう関数式を使用している場合はその手順は不要です。

関連する問題