.bashrc:
_make_go_apps() {
local r=/var/virtual
local d qd
while read d; do
printf -v qd '%q' "$r/$d"
eval "go_${d%.com}() { cd -- $qd; }"
done < <( find "$r" -maxdepth 1 -regex ".*/app[0-9]+\.com" -type d -printf '%f\n')
}
go_appX X , /var/virtual/appX.com , cd .
( , ):
# mkdir -p /var/virtual/app{1..50}.com
# _make_go_apps
# go_app42
# pwd
/var/virtual/app42
!
, _make_go_apps.
OP , .
eval , ( , , , , , ).
, , : , , , ..
.
/var/virtual, r, , .- ( ).
, _clean_go_apps go_appX. ( .bashrc):
clean_go_apps() {
local r=/var/virtual
local f
while read _ _ f; do
[[ $f =~ ^go_app[[:digit:]]+$ ]] || continue
[[ -d $r/${f#go_}.com ]] && continue
unset -f $f
done < <(declare -F)
}
.
, /var/virtual , , .bashrc:
readonly _go_apps_basedir=/var/virtual
make_go_apps() {
local d qd
while IFS= read -d '' d; do
printf -v qd '%q' "$_go_apps_basedir/$d"
eval "go_${d%.com}() { cd -- $qd; }"
done < <( find "$_go_apps_basedir" -maxdepth 1 -regex ".*/app[0-9]+\.com" -type d -printf '%f\0')
}
clean_go_apps() {
local f
while read _ _ f; do
[[ $f =~ ^go_app[[:digit:]]+$ ]] || continue
[[ -d "$_go_apps_basedir/${f#go_}.com" ]] && continue
unset -f $f
done < <(declare -F)
}
make_go_apps
_go_apps_basedir readonly, . IFS='' -d '' read -printf '%f\0' find, , find.
find _make_go_apps, 100% bash. 100% bash:
readonly _go_apps_basedir=/var/virtual
make_go_apps() {
local f d qd saved_shopt
saved_shopt=$(shopt -p)
shopt -s extglob nullglob
for d in "$_go_apps_basedir"/app+([[:digit:]]).com/; do
f=${d#$_go_apps_basedir/}
printf -v qd '%q' "$d"
eval "go_${f%.com/}() { cd -- $qd; }"
done
eval "$saved_shopt"
}
clean_go_apps() {
local f
while read _ _ f; do
[[ $f =~ ^go_app[[:digit:]]+$ ]] || continue
[[ -d "$_go_apps_basedir/${f#go_}.com" ]] && continue
unset -f $f
done < <(declare -F)
}
make_go_apps
... ( !), , .
Edit Have . Now, to make this post even longer, here it is the same, but it will create a function go_Xfor each directory X.cominside /var/virtual, so that Xcontains only the characters: [0-9a-zA-Z\-\._]. Put this in your .bashrc:
readonly _go_apps_basedir=/var/virtual
make_go_functions() {
local f d qd saved_shopt
saved_shopt=$(shopt -p)
shopt -s extglob nullglob
for d in "$_go_apps_basedir"/+([[:alpha:][:digit:]\-\._]).com/; do
f=${d#$_go_apps_basedir/}
printf -v qd '%q' "$d"
eval "go_${f%.com/}() { cd -- $qd; }"
done
eval "$saved_shopt"
}
clean_go_apps() {
local f
while read _ _ f; do
[[ $f =~ ^go_.+$ ]] || continue
[[ -d "$_go_apps_basedir/${f#go_}.com" ]] && continue
unset -f $f
done < <(declare -F)
}
make_go_functions