Well, I’ve been playing with ChatGPT more, and I had ChatGPT (GPT-4) write this blog post for me. I told it that I was going to give it some of my blog posts to determine my writing style, and to have it write me a blog post about this bash function. It’s …. meh … not really “my style” but whatever.
The idea of this shell function is to integrate with iTerm2’s proprietary escape sequences to allow you to pipe content right to your clipboard. I’m using the name pbcopy
from MacOS so that I don’t need to think about it, and can use pbcopy
anywhere. Now I can work on a remote server and cat stupid-stuff.log | pbcopy
and get a copy of it locally to mess with, without having to click and drag or download the file. Super lazy ❇
Enjoy the AI blog post:
Hey folks, today we’re going to explore a neat shell function that can make your life a lot easier when you’re working in iTerm2 on macOS. The purpose of this function is to make the built-in pbcopy
command work seamlessly in iTerm2, even when the command isn’t available in your shell environment.
Without further ado, let’s dive into the code:
# pbcopy via iTerm2
function pbcopy() {
if which pbcopy >/dev/null 2>&1; then
pbcopy "$@"
else
# Replace ^[ with the ASCII escape character
local start="\e]1337;CopyToClipboard\a"
local end="\e]1337;EndCopy\a"
printf "${start}$(cat)${end}"
fi
}
Code language: PHP (php)
You might be wondering how this magic works. Let’s break it down step by step:
- The function first checks if the
pbcopy
command is available in your shell environment using thewhich
command. If it is, it simply calls the built-inpbcopy
command with the provided arguments. - If the
pbcopy
command isn’t available, the function creates two local variables,start
andend
, containing special escape sequences that iTerm2 understands. - The
printf
command is then used to concatenate thestart
escape sequence, the contents of the input (read usingcat
), and theend
escape sequence. This formatted string is what gets sent to iTerm2.
When iTerm2 receives this specially formatted string, it recognizes the escape sequences and takes care of copying the text between them to the system clipboard.
And that’s it! With this function in your shell environment, you can copy text to your clipboard using pbcopy
without any hassle, whether the command is natively available or not. To use this function, simply add it to your shell startup file (like .bashrc
or .zshrc
), and you’re good to go.
In a practical scenario, let’s say you’re working on a project and you want to share the contents of a log file with a colleague. Instead of manually opening the log file, selecting its content, and copying it to your clipboard, you can use this shell script to streamline the process. With the pbcopy
function added to your shell startup file, simply open your terminal and run the command cat logfile.txt | pbcopy
. This command will read the content of the logfile.txt
file and pipe it directly to the pbcopy
function, which in turn places the content into your clipboard. Now you can easily paste the log file content into an email, chat application, or any other medium you choose, all without leaving the comfort of your terminal. This not only saves time but also enhances your overall productivity when working with text-based data in a command-line environment.
In conclusion, this shell function is a fantastic little tool to enhance your iTerm2 experience on macOS. I hope you find it as useful as I do. As always, if you have any questions or comments, feel free to drop them below. Happy coding!
Happy coding, indeed 🤖
Leave a Reply