web-dev-qa-db-ja.com

タブで実行されたコマンドを保持する(bashスクリプト)

複数のタブでターミナルウィンドウを起動し、これに似た各タブでコマンドを実行するbashスクリプトがあります(タイトルはサポートされていません)。

#!/bin/bash

title1="foo"
title2="bar"

cmd1="sleep 1s"
cmd2="cd ~/Desktop"

gnome-terminal --tab --title="$title1" --command="bash -c '$cmd1; $Shell'" \
               --tab --title="$title2" --command="bash -c '$cmd2; $Shell'"

実際のスクリプトでは、いずれかのタブのプロセスが停止すると、通常は再起動する必要があります。ただし、UPキーを押しても、そのタブのスクリプトで使用されているコマンドは生成されません。この動作は、このスクリプトでも同じです。最初のタブを押すと、「sleep 1s」ではなく、他の場所で使用したコマンドとはまったく異なります。

開いたタブで、スクリプトで使用されている$ cmdを保持する方法はありますか?

これよりもエレガントな解決策があるはずですが、次のようなものを試すことができます。

--command="bash -c 'export HISTFILE=/tmp/hist\$\$; history -s \"$cmd1\";
           history -w; $cmd1; exec $Shell'"

bashには独自の履歴ファイルhist$$が与えられ、$$はプロセスのpidに後で評価するためにエスケープする必要があります。 history -sは文字列を履歴リストに保存し、-wはそれをHISTFILEに保存します。シェルは、環境で設定されたこの値を使用すると想定されています。たとえば、--norcとは異なる履歴ファイルの設定を停止するには、bashに~/.bashrcを追加する必要がある場合があります。

1
meuh