🎉
[linuxコマンド] 直前のコマンドと出力結果を取得する方法
はじめに
記事をにコードブロックを貼る時、わざわざカーソルを合わせて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
シェルスクリプトでは、history
やfc
などのコマンドが使えないので、~/.zsh_history
を参照している
tail -n 2 ~/.zsh_history|head -n 1 | awk -F':' '{print $3}'|sed 's/0;//'
-
tail -n 2 ~/.zsh_history
:2個前までのコマンドを取得
1つ前は、実行したこのコマンドなので、2個前までが必要 -
head -n 1
:1行目を取得
これで、直前のコマンドが取得できる -
awk -F':' '{print $3}'|sed 's/0;//
: ここでうまいことやって、コマンドのみを抜粋してる -
echo -e "\`\`\`bash\n% $previous_command\n\n$$clipboard_content\n\`\`\`"
: バックスラッシュをエスケープして、すぐ貼り付けできるようにコードブロックを作る -
標準出力画面に出力し、クリップボードにもコピーする
これで幾分か楽になるかもしれない
いや、なってくれ
参考
Discussion