“The script accepts the name of a program or package as an argument when you run it. This value is then referenced as “$1” (argument number 1). Everywhere the script says “$1”, it substitutes in the name of the package you gave it. The end result is the name being tried against a large number of software repositories and package managers, and hopefully, at least one of them will be appropriate and the program will be successfully installed.”
Source: explain XKCD
Yep, thanks!
I don’t think they asked for an explanation, but thanks anyways!
ExplainXKCD’s a great site, more XKCD readers should know about it!
Nobody asked, but I needed it. Thought that perhaps I’m not alone, so now that I have the answer, might as well share it here.
That sonds like a good thought process, I’ll try it too
WHERE IS PACMAN, our HOLY SAVIOR?
Jokes aside,
paru
.Why are there so many paru fans? Last release is a year old, constantly out of date in AUR and failing builds in Github don’t scream code quality. I prefer yay.
Because it’s written in rust ofcourse.
It also sounds much happier, yay!
Should’ve used “||”
That would be slower. This tries all of the tools in parallel.
doesn’t that do all of them together, possibly making you install it multiple times ?
The idea is that only one will succeed. Look, it is a comic not a production-ready solution.
Don’t care, ship it now!
Ignoring you’re right there are plenty of instances where a common name would carry over multiple install options.
What I’d rather is to allow two parameters. The tool should be included as well as the package so ‘install apt openjdk’ or ’ install npm yarn’
Of course the problem then becomes a lot of these install apps have their own set of parameters.
Now I’m curious if anyone has written a universal installer.
You are missing the point. The author is satirizing the fact that there are so many tools and patterns that do basically the same thing. The author doesn’t want to bother figuring out what installation method this particular tool recommends. So they have this script so that he can run
geterinstalled inkscape
and let the computer figure out which one works.If you were going to write
geterinstalled pip foo
you may as well just runpip install foo
.Also note the title-text, which addresses this exact issue:
The failures usually don’t hurt anything, and if it installs several versions, it increases the chance that one of them is right. […]
Not missing the point. I know it’s satire. As a thought experiment it got me interested though nothing more.
I’ve been working on one for a minute but the best solution I’ve come up with is searching every package manager when search is invoked but otherwise requiring the package manager to be declared via
pkgman.package
for installs/removes etc.
Nix entered the chat
Nix!
Microsoft: “winget!”
Nobody asked you, Microsoft. Go back to making compact nuclear reactors, because honestly that’s based AF.
wasn’t a thing yet when the comic was made; technology advances so quickly…
Yeah, but it’s also a Windows exclusive - so it’s just usable on the Windows platform, but it’s a package managed for windows!
winget install gimp.GIMP
installs gimp, no browser necessary =)Check the link though. Microsoft might pull a sneaky in the future. “All Winget packages will be bundled with telemetry for security” or something like that.
topgrade? https://github.com/topgrade-rs/topgrade
Kinda meant it as a joke, but that’s actually super cool
Where pacman?
sudo pacman -Sy $1
There you go.
It doesn’t even run detached. Literally unrunnable.
Thanks.
flatpak install "$1" snap install "$1" appimage-cli-tool install "$1"
wait… no alpine apk?! :)
Unless you have a pretty exotic architecture, i.e neither x86 nor ARM, then arguably Docker “should” be “enough”.
You’re gonna need a -y on apt-get
Where’s
sudo emerge -avq $1
?? How dare you omit it?! Blasphemy!I am not the most experienced by any means, but wouldn’t it be better to run it with a “;” in the spot off all of the “&” so that way if one of the commands fail it doesn’t stop mid script?
deleted by creator
Yeah you are right. Thanks for the correction
And even then, don’t you want
||
? You want to run the next one only if the previous one failed, right?
gam
(GitHub Application Manager)