複数行コマンドをコピーするために行番号を使用せずに「history」コマンドをどのように実行できますか?

複数行コマンドをコピーするために行番号を使用せずに「history」コマンドをどのように実行できますか?

時々コマンドを実行すると、history4つのコマンドが連続して表示されることがあります。

再実行できるようにこのコマンドをコピーしたいと思います。

私は通常、マウスとShift-Ctrl-cを使って選択するのにうまくいきますが、行番号も得ます。

history行番号がない場合はどうすればよいですか?

マニュアルページを試してみましたが迷いました。

答え1

履歴出力はローカル環境によって異なります。私のコンピュータでは、次のようになります。

 $ history | tail -1
 2993  2012-08-13 17:42:17 echo "test"

あなたの答えのどれも私には適していません。

便利なオプションfc(通常は組み込み)は、ローカル設定とは完全に独立している可能性があります。

fc-n出力で数字を抑制するオプションがあります。したがって、コマンドは次のようになります。

fc -l -n

最後のコマンドのみを出力します。

この方法で全履歴を出力するには、次のようにします。

fc -l -n 1  

最初にスペースを出力したくない場合は、sedを使用してスペースを削除できます。

fc -l -n 1 | sed 's/^\s*//'

答え2

awkを使用してください:

history | awk '{$1="";print}'

答え3

存在するbash

history | tr -s ' ' | cut -d' ' -f3-

からzshksh

history -n

存在するtcsh

history -h

編集する

使用に関するRushの回答も参照してくださいfc

答え4

もう一つの解決策は端末を使用することですブロック選択方法もしそうなら。通常選択する前にCtrlキーを押し続けてください。マウスを使用してください。これにより、多くの最新の端末(確かにlibvteベースの端末)でブロック選択モードが有効になります。

次に、選択ブロックにコピーするすべての行を含めるように(最も長いコマンドの全幅まで)ドラッグします。その後、貼り付けるだけで改行が維持されます。

これは、行番号のプレフィックス、ログファイルのタイムスタンプなどの問題を回避するためにクイックコピー/貼り付けを実行するときに1日に複数回使用する簡単な方法です。

コピーされたコマンドの1つが複数行にまたがると、この機能は機能しません。

関連情報