Skip to content

Instantly share code, notes, and snippets.

View ormaaj's full-sized avatar
🙃

Daniel Douglas ormaaj

🙃
View GitHub Profile
@ormaaj
ormaaj / roflparser.md
Created March 10, 2025 19:35
Silly bash typeset builtin wrapper

This script exploits bash's weird interpretation of POSIX's requirement that declaration builtins overloaded by functions must not modify the parsing of the arguments. Bash even extends this requirement to nonstandard extensions such as arrays. This typeset wrapper parses options by stealing the (approximately correct) optstring from ksh. It modifies each assignment then prints the effect of the command as a side-effect.

Code:

@ormaaj
ormaaj / .bash
Last active February 16, 2025 00:07
field splitting
for sh in bash bb dash yash gash bosh ksh kshv mksh loksh posh zsh mrsh; do
printf '%-6s ' "${sh}:"
"$sh" -c 'IFS=0; bash -c "printf \"%q \" \"\$@\"" bash $((x=1101001101))$((x))$((IFS=!IFS))${x}$((x)) ${x}$((x)) "${y:=$((x))}"${y+${z=$((y))}"$((y))"${z}$((IFS=!IFS))}' 2>&3
echo
done 3>/dev/null
@ormaaj
ormaaj / tmux.conf
Created January 29, 2025 23:13
tmux panes
%hidden trace='strace -DDYYyqqqf'
%hidden el=/usr/bin/execlineb
%hidden bashargs='-sipo vi +o posix +o histexpand -O lastpipe -O extglob -O expand_aliases +O array_expand_once +O sourcepath'
%hidden kshargs='-sipo vi -o posix'
%hidden shexec='import os, os.path, sys, pwd; \
os.sched_setscheduler(0, os.SCHED_OTHER, os.sched_param(0)); \
os.nice(-os.getpriority(os.PRIO_PROCESS, 0)); \
os.environ.setdefault("TMPDIR", "/tmp"); \
os.environ.setdefault("BASH_COMPAT", "51"); \
p = { k: str(v) for k, v in zip(("USER", None, "UID", "GID", None, "HOME", "SHELL"), pwd.getpwuid(os.geteuid())) if k }; \
@ormaaj
ormaaj / arr2set.bash
Last active August 26, 2024 18:08
multiple mixed type array to set
#!/usr/bin/env bash
BASH_COMPAT=51
# Swap or merge keys and indices
function arr2set {
typeset -i n m
typeset -n _ret=$1 r
[[ ${_ret@a} == *A* ]] || return
shift
for r do
@ormaaj
ormaaj / output (bash 5.3)
Last active August 16, 2024 19:04
test pipeline pid access through jobs -p
0: 0,4
1: 0,5
2: 0,6
3: 0,2
@ormaaj
ormaaj / eeyore.bash
Last active June 10, 2024 10:32
file sorting example
#!/usr/bin/env -S-- BASH_COMPAT=51 bash -O lastpipe -O extglob -O expand_aliases +O assoc_expand_once +O sourcepath
typeset x
x=$(pkgconf --var=loadablesdir bash) &&
[[ ! $BASH_LOADABLES_PATH =~ (^|:)"$x"($|:) ]] &&
BASH_LOADABLES_PATH+=${BASH_LOADABLES_PATH:+:}${x}
for x in asort mktemp
do enable -f "$x"{,} || exit
done
@ormaaj
ormaaj / .ksh
Created May 6, 2024 11:10
ksh empty array subscripts
(ins)ormaaj 65 (2713681) 2 ~ $ function f { unset -f f; typeset -ia fd; typeset -n fdn=fd[\${#fd[@]}]; { env -- BASH_FUNC_pre_pkg_{pretend,setup}'%%=() { function tc-check-openmp { return 0; }; }' execlineb -- "/proc/self/fd/${fd[0]}" "${fd[@]}"; } {fdn}<<\EOF {fdn}<<\EOF; typeset x; for x in "${fd[@]}"; do exec {x}<&-; done; }; f
fdreserve 1
multisubstitute {
importas -iu f0 FD0
elgetpositionals
}
emptyenv -P
fdclose $1
define -sd " " v "${2} ${f0}"
creatememfd $f0 ""
@ormaaj
ormaaj / .bash
Last active July 10, 2024 20:23
aliases
\unset -v aliasrestore
aliasrestore=$(\alias -p) aliasrestore+=${aliasrestore:+$'\n\\'unset -v aliasrestore}
\unalias -a
function setupGlobalAliases {
alias -- \
'--=-- ' \
'l-=local -' \
'fn=function ' \
'exec=exec ' \
@ormaaj
ormaaj / .kshrc
Last active September 11, 2023 00:16
~/.bashrc ~/.kshrc
#!/bin/false
\typeset -a bool; bool+=([1]=)
\typeset -n sh_file
\test -v KSH_VERSION
sh_file=${bool[$?]+bash_source[0]}${bool[!$?]+.sh.file}
dotFilesPath=$(\findmnt -umlnfo target -O subvol=/vol/dotfiles "PARTUUID=$(\findmnt -umlnfo partuuid -T /)")
[[ $sh_file == ?(*/)shell ]]
\source -- ${bool[!$?]+"$sh_file"}${bool[$?]+"${dotFilesPath}/common/home/shell"}/functions
rc_main "$@"
@ormaaj
ormaaj / open fd count per instance vs eager loading.bash
Last active June 10, 2023 20:40
bash builtin loader with lazy loading
$ { function f { lsfd -np "$BASHPID" --summary=only -C ' :ASSOC == "mem"'; }; typeset -fx f; f; bash -ic 'f; type -t print; print -r :\); type -t print; f; print -r :D'; } | tr -s '\n ' ' '; echo
247 31 function :) builtin 36 :D