🎉

[linuxコマンド] 直前のコマンドと出力結果を取得する方法

2024/08/01に公開

はじめに

記事をにコードブロックを貼る時、わざわざカーソルを合わせてctrl+Cするのは面倒。
コマンドでなんとかしたい。

環境

  • System Version: macOS 14.4 (23E214)

手順

以下のコマンドと出力結果を取得する

% echo "hello!"

直前のコマンドを取得する

historyを使う

% history -n -1'

cd ..
  • -n: 行番号を表示しない
  • -1: 直前のコマンドを取得

fcを使う

% fc -ln -1 

cd ..
  • fc :fix command
  • -l :履歴をリスト形式で表示
  • -n :行番号を表示しない
  • -1 :直前のコマンドを取得

fcのほうが楽かな〜

出力結果を取得する

% echo "hello!" | tee /dev/tty |pbcopy
  • tee /dev/tty :出力結果をリダイレクト先と、標準出力に出力

出力結果(hello!)をクリップボードにコピーしつつ、標準出力にも出力している

エイリアスに登録する

~/.zshrcに以下を追記

alias clipcopy='tee /dev/tty |pbcopy'

これで、同じ処理が以下のように行える

% echo "hello!" | clipcopy

シェルスクリプトにする

pcr
#!/bin/bash

previous_command=$(tail -n 2 ~/.zsh_history|head -n 1 | awk -F':' '{print $3}'|sed 's/0;//')

clipboard_content=$(pbpaste)

formatted_content="\`\`\`bash\n% $previous_command\n\n$clipboard_content\n\`\`\`"

echo -e "$formatted_content"
echo -e "$formatted_content" | pbcopy

シェルスクリプトでは、historyfcなどのコマンドが使えないので、~/.zsh_historyを参照している

tail -n 2 ~/.zsh_history|head -n 1 | awk -F':' '{print $3}'|sed 's/0;//'
  1. tail -n 2 ~/.zsh_history :2個前までのコマンドを取得
    1つ前は、実行したこのコマンドなので、2個前までが必要

  2. head -n 1 :1行目を取得
    これで、直前のコマンドが取得できる

  3. awk -F':' '{print $3}'|sed 's/0;//: ここでうまいことやって、コマンドのみを抜粋してる

  4. echo -e "\`\`\`bash\n% $previous_command\n\n$$clipboard_content\n\`\`\`": バックスラッシュをエスケープして、すぐ貼り付けできるようにコードブロックを作る

  5. 標準出力画面に出力し、クリップボードにもコピーする

これで幾分か楽になるかもしれない
いや、なってくれ

参考

https://numb86-tech.hatenablog.com/entry/2019/10/04/164547
https://teratail.com/questions/179562
https://kamesuke42.hatenablog.com/entry/2022/05/16/231841
https://qiita.com/hoge_5555/items/f677f9ec7cd859380426

GitHubで編集を提案

Discussion