This article also has a GPT-translated Chinese version. 这篇文章同时提供 GPT 翻译的中文版本，可以在此阅读。
Not an April Fool's joke!
If you have installed Golang, you can now try opening your Terminal and typing
??. You will find that it magically transforms into the Golang CLI.
Yes! It is the
go command! Guaranteed to be genuine!
Beginning of the Story: GitHub Copilot CLI
A month ago, I received an invitation to use GitHub Copilot CLI, which was in technical preview. It uses GPT to help us translate natural language to shell commands.
As we can see in the demo GIF above, we just need to type
?? <instruction> to ask GPT to write down the expected command for us.
So I installed it and came across this section in its documentation about how to set up the
?? alias for the sake of convenience:
...we recommend you install the
gh?commands in your shell... To install them, run the following command:
eval "$(github-copilot-cli alias -- "$0")"
I was about to do this, but I just wanted to make sure the
?? is safe to alias. So I typed it and pressed enter:
➜ ~ ?? Go is a tool for managing Go source code. Usage: go <command> [arguments] ...
Wait a minute....
Why is the
?? command linked to
Searching and Asking
So I asked in the discord group:
But unfortunately, no one knows the answer.
Could it be that I misconfigured my
.zshrc file? After checking for a while, the answer is no. My configuration looks good.
Then I searched across the Golang Repo, but couldn't find anything about the
?? alias. And no issues were posted.
Next, I tried to google it. But it became hard to describe the case. It looked like the "??" keyword query can not even be prioritized by the search engine. The search result is almost irrelevant.
It looks like I was the first one coming across this issue on the whole Internet!
I gave up. And I typed the
eval "$(github-copilot-cli alias -- "$0")" to alias my
?? to the
github-copilot-cli so that things looks good as long as we ignore the weird part. The only thing that was still not perfect was that
which ?? still gives me the location of the go binary. That's because the function command initialization only ran on every start of sessions. This is even more confusing.
More People Joined the Mystery
In the following month, many more people have got access to the GitHub Copilot. And some of them has encountered the same issue as mine.
I'm glad that at least I'm not alone.
The Answer Was Found
Finally, today (a month later) the case was solved by someone from the GitHub Next team:
??command is being expanded by the shell to match any two-character binary entry in the current working directory.
What does that even mean?
He did point out the general mechanism, but made one mistake - it's matching filenames and directories instead of binaries. To clarify, it means when we use
??, we are looking for filenames or directories in the current folder that consist of exactly two characters.
No matter how many
? we type, the same rule applies!
In the example above,
echo ?????? lists us all the possible directories or filenames with the length of 6 characters;
cd ????? brings us to the only directory with the length of 5 characters.
GitHub Movies Public
So, in our case, the
?? in the home directory resolves to the only directory
go with the length of 2 characters.
If we are in another directory without the
go directory in it, it won't work:
Wait.... One More Question
Didn't we just say "directory or filename"? Why does it bring out the
go binary instead!?
Yes! I know, right? The expected behavior should be entering the
go directory (for that in bash
<dirname> is equivalent to
This is because the global binary file location resolving has a higher priority than the local filename or directories. For example:
Here we make a file named
go then type the
go command, it won't execute the local
go file but will execute the global
go binary. We need to specifically type the relative path to the local file to execute it:
When it comes to directory, it has a similar behavior, but directory allows us to
cd without the explict
So, if there is a file or directory named
go in the current directory, and when we type
??, it will expand to this
go filename or directory name, then try to execute it.
We can achieve the same behavior with
Even More Interesting
When we know that the
??.. command executes the expanded filenames or directories, something interesting can be done.
echo some words:
Even better, why not execute some
Just ensure that every word of the script should be in the same length and the initial letter of each word should follow the alphabet order.
Alright. I hope you enjoy this April Fool's Article. Now, change the "wow" script to
rm -rf / and send it to your best friend, tell they to execute
???. Enjoy! (Just kidding! Don't do this!)