2011-08-03 18 views
1

を印刷するとき、私はiTerm2を使用してうなり声の通知を作成し、私の.profileでこの機能を、持って立ち往生:私はdeclare -f growlをすれば、bashが立ち往生となり、あなたの唯一のオプションは、バッシュは、特殊文字

function growl() 
{ 
    echo -n -e $'\e]9;'"[email protected]"'\007' 
} 

をしかし、現在のターミナルウィンドウを閉じます。あなたはおそらく、コントロールを含め、機能の完全な定義を印刷している知っているように、

growl() 
{ 
    echo -n -e ' 

7;file://path/to/current/work/dir 

答えて

2

declare -f growl:iTerm2 +で

出力はstuckedガイド:

growl() 
{ 
    echo -n -e ' 

出力端子+ベルで文字。

定義を変更して、文字を関数定義にそのまま組み込むことなく、必要な文字を出力できるようにすることをお勧めします。 Bashのechoコマンドは、-eオプションを使用して、ベル文字に対して\aなどのエスケープシーケンスを認識できるようにします。詳細についてはinfo bashを検索し、「エコー」を検索してください。

(あなたがあなたのターミナルエミュレータを台無しにしたら回復する方法を求めているならば、私は答えを持っていません。)

編集:私は質問を読み違えます。問題は、エスケープシーケンスを実際の制御文字に展開する$'...'構文を使用していることです。明らかに、declare -fは展開された文字列を印刷しています。ただ$'...'構文を使用しないでください。

function growl() 
{ 
    echo -n -e '\e]9;'"[email protected]"'\a' 
} 

'\a''\007'に相当します。)

EDIT2:固定タイプミス

EDIT3:どうやらのbashの一部のバージョンでは、echo -n -e '\e'は、エスケープ文字を印刷しませんが、 '\ 033'動作します。改訂ソリューション:

function growl() 
{ 
    echo -n -e '\033]9;'"[email protected]"'\a' 
} 

(質問者が使用しているのbash 3.2.48私は3.2.25が正しく、これを行うことが確認できましたそれは奇妙だ。。。)

+0

\ e]と等価です。 – Tyilo

+0

無効な構文+ 'echo -n -e $ \ e] 9; '" $ @ "' \ a''は唸り通知を表示しません – Tyilo

+0

@Tyilo:間違った文字を削除しました。私はちょうどそれを更新する。再試行する。 (ちなみに、「Growl」はMacOS特有のものなので、実際にはテストできません) –

1

最終的な解決策:

は内部包み一重引用符を使用してevalを使用してください:

function growl() 
{ 
    eval 'echo -e -n $'"'"'\e]9;'"'"'"[email protected]"'"'"'\007'"'"';' 
} 
+0

これは奇妙です。 3つのソリューション(あなたの質問の答え、私の答えの答え、あなたの最終的な解決の答え)*はすべて同じにすべきです。唯一の違いは 'declare -f growl'の動作です(私はこれをbash 4.2.8で確認しました)。私のために何かを試すことができますか? 3つの定義のそれぞれをコピー&ペーストし、 'growl hello | od -c'です。私は、各バージョンで全く同じ出力を得ています。もしあなたがそうしているのであれば、なぜ私はすべてのバージョンがあなたのために働いているのだろうと思います。もしあなたがしなければ、何か変わったことが起きている。 –

+0

結果:http://cl.ly/91jz – Tyilo

+0

ターミナルでの同じ結果:http://cl.ly/91P9 – Tyilo