web-dev-qa-db-ja.com

シェルスクリプトのエコーに-neフラグを使用するにはどうすればよいですか?

引数を取り、それを使用してターミナルタブに名前を付けるシェルスクリプトを作成しようとしています。したがって、スクリプトの名前がtabnmの場合、tabnm "test"は現在のタブの名前を "test"に変更する必要があります。

これは私のコードです:

#!/bin/sh
echo -ne "\e]1;$1\a"

しかし、実行すると、次の出力が得られます。

robin @ icarus $ shtabnm.shテスト
-ne\e] 1;テスト

シェルでecho-ne "\ e] 1; Test\a"を直接実行すると、タブの名前が変更されます。

5
robin smith

これが、/bin/shechoとインタラクティブシェルの違いになります。代わりにprintfを使用することをお勧めします。 NIXとecho を参照してください。

5
geekosaur

問題は、シェルが/bin/shとは異なるエスケープコードを認識することです。

/bin/shはおそらく\eをエスケープ文字として認識しません。代わりに\033を試してください。

\aを同等のcode\007に置き換えて、それが機能するかどうかを確認することもできます。

1
Daniel Beck

Bashのコードを作成する場合は、Shebangの行でそのように言う必要があります。

#!/bin/bash
echo -ne "\e]1;$1\a"
0
Chad