引数を取り、それを使用してターミナルタブに名前を付けるシェルスクリプトを作成しようとしています。したがって、スクリプトの名前が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"を直接実行すると、タブの名前が変更されます。
これが、/bin/sh
のecho
とインタラクティブシェルの違いになります。代わりにprintf
を使用することをお勧めします。 NIXとecho
を参照してください。
問題は、シェルが/bin/sh
とは異なるエスケープコードを認識することです。
/bin/sh
はおそらく\e
をエスケープ文字として認識しません。代わりに\033
を試してください。
\a
を同等のcode\007
に置き換えて、それが機能するかどうかを確認することもできます。
Bashのコードを作成する場合は、Shebangの行でそのように言う必要があります。
#!/bin/bash
echo -ne "\e]1;$1\a"