Skip to content

Instantly share code, notes, and snippets.

@tueda
Last active April 2, 2026 09:36
Show Gist options
  • Select an option

  • Save tueda/28951755d390afd707abe1dc36aee56c to your computer and use it in GitHub Desktop.

Select an option

Save tueda/28951755d390afd707abe1dc36aee56c to your computer and use it in GitHub Desktop.
#!/bin/bash
set -euo pipefail
# cSpell:ignore clangxx
# cSpell:ignore Cython
# cSpell:ignore eMELA
# cSpell:ignore flang
# cSpell:ignore gfortran
# cSpell:ignore gsub
# cSpell:ignore ipython
# cSpell:ignore lhapdf
# cSpell:ignore networkx
# cSpell:ignore numba
# cSpell:ignore numpy
# cSpell:ignore rustc
# cSpell:ignore scipy
# cSpell:ignore tolower
# cSpell:ignore xarray
# cSpell:ignore zarr
try_run() {
local out
IFS= read -r out < <("$@" 2>/dev/null) || [ -n "$out" ] || return 0
if [[ "$out" =~ ^[A-Za-z0-9._,-]*$ ]]; then
printf '%s\n' "$out"
else
printf "'%s'\n" "$out"
fi
}
first_line() {
sed -n '1p'
}
os_version() {
{
# shellcheck disable=SC1091
. /etc/os-release 2>/dev/null
echo "$PRETTY_NAME"
}
}
os_arch() {
uname -m
}
triplet() {
gcc -dumpmachine
}
bash_version() {
echo "$BASH_VERSION"
}
gcc_version() {
gcc -dumpfullversion
}
gxx_version() {
g++ -dumpfullversion
}
gfortran_version() {
gfortran -dumpfullversion
}
clang_version() {
clang -dumpversion
}
clangxx_version() {
clang++ -dumpversion
}
flang_version() {
flang -dumpversion
}
perl_version() {
perl -e 'printf "%vd\n", $^V'
}
python3_version() {
python3 --version | awk '{print $2}'
}
pip3_library_versions() {
python3 -m pip list 2>/dev/null |
grep -E '^(awkward|Cython|ipython|matplotlib|networkx|numba|numpy|pandas|polars|scikit-image|scikit-learn|scipy|seaborn|uproot|xarray|zarr) ' |
awk '{gsub("-", "_", $1); $1=tolower($1); print "python3_" $1 "_version=" $2}'
}
ruby_version() {
ruby --version | awk '{print $2}'
}
node_version() {
node --version | sed 's/^v//'
}
rustc_version() {
rustc --version | awk '{print $2}'
}
go_version() {
go version | awk '{print $3}' | sed 's/^go//'
}
julia_version() {
julia --version | sed 's/^.*version//i' | awk '{print $1}'
}
curl_version() {
curl --version | first_line | awk '{print $2}'
}
wget_version() {
wget --version | first_line | awk '{print $3}'
}
git_version() {
git --version | sed 's/^.*version//i' | awk '{print $1}'
}
make_version() {
make --version | first_line | awk '{print $3}'
}
cmake_version() {
cmake --version | first_line | sed 's/^.*version//i' | awk '{print $1}'
}
ninja_version() {
ninja --version
}
nano_version() {
nano --version | first_line | sed 's/^.*version//i' | awk '{print $1}'
}
vim_version() {
vim --version | first_line | awk '{print $5}'
}
nvim_version() {
nvim --version | first_line | awk '{print $2}' | sed 's/^v//'
}
emacs_version() {
emacs --version | first_line | awk '{print $3}'
}
root_version() {
root-config --version
}
mg5_aMC_version() {
echo 'exit' | mg5_aMC | grep -i version | first_line | sed 's/^.*version//i' | awk '{print $1}'
}
lhapdf_version() {
lhapdf-config --version
}
eMELA_version() {
eMELA-config --version
}
pythia8_version() {
pythia8-config --version
}
fastjet_version() {
fastjet-config --version
}
ma5_version() {
ma5 --version | sed 's/^.*release//i' | sed 's/://g' | awk '{print $1}'
}
for f in \
os_version \
os_arch \
triplet \
bash_version \
gcc_version \
gxx_version \
gfortran_version \
clang_version \
clangxx_version \
flang_version \
perl_version \
python3_version \
ruby_version \
node_version \
rustc_version \
go_version \
julia_version \
curl_version \
wget_version \
git_version \
make_version \
cmake_version \
ninja_version \
nano_version \
vim_version \
nvim_version \
emacs_version \
root_version \
mg5_aMC_version \
lhapdf_version \
eMELA_version \
pythia8_version \
fastjet_version \
ma5_version; do
v=$(try_run "$f")
if [ -n "$v" ]; then
echo "$f=$v"
if [ "$f" = "python3_version" ]; then
pip3_library_versions || :
fi
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment