splitted main file, added rain, bump to v3.0.0
This commit is contained in:
324
profile.d/compress.sh
Normal file
324
profile.d/compress.sh
Normal file
@@ -0,0 +1,324 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Smartly uncompress archives (zip only)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
utaz()
|
||||||
|
{
|
||||||
|
for opt in $@ ; do
|
||||||
|
case $opt in
|
||||||
|
"-h"|"--help")
|
||||||
|
echo "utaz: uncompress all the given files and/or the ones found in the given"
|
||||||
|
echo " directories creating an host directory where needed."
|
||||||
|
echo
|
||||||
|
echo "Usage: utaz [option] [directorie(s)|file(s)]"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " -h, --help Display that help screen"
|
||||||
|
echo " -d, --delete If decompression succeeded, delete the source file"
|
||||||
|
echo " -c, --create-dir Always create a host directory"
|
||||||
|
echo " -n, --no-dir Never create a host directory"
|
||||||
|
echo
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-d"|"--delete")
|
||||||
|
local willrm=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-c"|"--create-dir")
|
||||||
|
local createdir=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-n"|"--no-dir")
|
||||||
|
local nodir=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-"*)
|
||||||
|
echo "Invalid option, use \"utaz --help\" to display options list"
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
# The ${opt%/} writing is to remove trailing / if any
|
||||||
|
local LIST="$LIST ${opt%/}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ $createdir && $nodir ]] && echo "*** Error: --create-dir and --no-dir options are mutually exclusive."
|
||||||
|
|
||||||
|
[[ ! $LIST ]] && local LIST="."
|
||||||
|
|
||||||
|
for zitem in $LIST; do
|
||||||
|
[[ $(ls $zitem/*.zip 2> /dev/null | wc -l) -eq 0 ]] &&
|
||||||
|
echo "$zitem contains no supported archive file, skipping." &&
|
||||||
|
continue
|
||||||
|
|
||||||
|
for f in $zitem/*.zip; do
|
||||||
|
echo -n "Processing archive $zitem/$f... "
|
||||||
|
local dir=${f::-4}
|
||||||
|
|
||||||
|
mkdir -p $dir
|
||||||
|
[[ $? -gt 0 ]] &&
|
||||||
|
echo "[ filesystem can't create directories, exit ]" &&
|
||||||
|
return 1
|
||||||
|
|
||||||
|
unzip -o $f -d $dir > /dev/null 2>&1
|
||||||
|
case $? in
|
||||||
|
0)
|
||||||
|
[[ $willrm ]] && rm -f $f && echo -n "Deleted ! "
|
||||||
|
;;
|
||||||
|
|
||||||
|
1)
|
||||||
|
echo "No deletion on warnings "
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "[ zip file corrupted, failed ]"
|
||||||
|
rm -rf $dir > /dev/null 2>&1
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ $createdir ]]; then
|
||||||
|
echo -n "[ subdir created, "
|
||||||
|
elif [[ $nodir ]]; then
|
||||||
|
mv ./$dir/* ./ && rmdir $dir
|
||||||
|
echo -n "[ No subdir, "
|
||||||
|
else
|
||||||
|
subdirs=$(find $dir -maxdepth 1 | wc -l)
|
||||||
|
if [[ $subdirs -eq 2 ]]; then
|
||||||
|
mv ./$dir/* ./ && rmdir $dir
|
||||||
|
echo -n "[ No subdir, "
|
||||||
|
else
|
||||||
|
echo -n "[ subdir created, "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo " OK ]"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
export -f utaz
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Compress directories or files into one or more archive
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
taz ()
|
||||||
|
{
|
||||||
|
_doxz()
|
||||||
|
{
|
||||||
|
command -v xz >/dev/null 2>&1 || {
|
||||||
|
echo -e >&2 "\t*** The program 'xz' is not installed, aborting."
|
||||||
|
return 127
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $4 ]] && local verb='-v'
|
||||||
|
|
||||||
|
# Display a warning for this format
|
||||||
|
echo -e "\t! Warning: xz format is not suited for long term archiving."
|
||||||
|
echo -e "\t See https://www.nongnu.org/lzip/xz_inadequate.html for details."
|
||||||
|
|
||||||
|
# Compresse to xz (lzma2) - Deprecated
|
||||||
|
xz $verb --compress --keep -$3 -T $2 $1
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
_dolz()
|
||||||
|
{
|
||||||
|
local procopt="--threads $2"
|
||||||
|
local command=plzip
|
||||||
|
|
||||||
|
command -v plzip >/dev/null 2>&1 || {
|
||||||
|
command -v lzip >/dev/null 2>&1 || {
|
||||||
|
echo -e >&2 "\t*** Program 'plzip' or 'lzip' are not installed, aborting."
|
||||||
|
return 127
|
||||||
|
}
|
||||||
|
local command=lzip
|
||||||
|
local procopt=""
|
||||||
|
[[ $2 -gt 1 ]] &&
|
||||||
|
echo -e "\t! Warning: lzip doesn't support multithreading, falling back to 1 thread." &&
|
||||||
|
echo -e "\t* Consitder installing plzip to obtain multithreading abilities."
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $4 ]] && local verb="-vv"
|
||||||
|
|
||||||
|
# Compresse au format lzip (lzma)
|
||||||
|
$command $verb $procopt --keep -$3 $1
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
_dogz()
|
||||||
|
{
|
||||||
|
local procopt="--processes $2"
|
||||||
|
local command=pigz
|
||||||
|
|
||||||
|
command -v pigz >/dev/null 2>&1 || {
|
||||||
|
command -v gzip >/dev/null 2>&1 || {
|
||||||
|
echo -e >&2 "\t*** Programs 'pigz' or 'gzip' are not installed, aborting."
|
||||||
|
return 127
|
||||||
|
}
|
||||||
|
local command="gzip --compress"
|
||||||
|
local procopt=""
|
||||||
|
[[ $2 -gt 1 ]] &&
|
||||||
|
echo -e "\t! Warning: gzip doesn't support multithreading, falling back to 1 thread." &&
|
||||||
|
echo -e "\t* Consitder installing pigz to obtain multithreading abilities."
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $4 ]] && local verb="--verbose"
|
||||||
|
|
||||||
|
# Compresse au format bz2
|
||||||
|
$command $verb $procopt --keep -$3 $1
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
_dobz2()
|
||||||
|
{
|
||||||
|
local procopt="-p$2"
|
||||||
|
local command=pbzip2
|
||||||
|
|
||||||
|
command -v pbzip2 >/dev/null 2>&1 || {
|
||||||
|
command -v bzip2 >/dev/null 2>&1 || {
|
||||||
|
echo -e >&2 "\t*** The program 'pbzip2' or 'bzip2' are not installed, aborting."
|
||||||
|
return 127
|
||||||
|
}
|
||||||
|
local command=bzip2
|
||||||
|
local procopt=""
|
||||||
|
[[ $2 -gt 1 ]] &&
|
||||||
|
echo -e "\t! Warning: bzip2 doesn't support multithreading, falling back to 1 thread." &&
|
||||||
|
echo -e "\t* Consitder installing pbzip2 to obtain multithreading abilities."
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $4 ]] && local verb="-v"
|
||||||
|
|
||||||
|
# Compresse au format bz2
|
||||||
|
$command $verb --compress $procopt --keep -$3 $1
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
_dolzo()
|
||||||
|
{
|
||||||
|
command -v lzop >/dev/null 2>&1 || {
|
||||||
|
echo -e >&2 "\t*** The program 'lzop' is not installed, aborting."
|
||||||
|
return 127
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $4 ]] && local verb='-v'
|
||||||
|
[[ $2 -gt 1 ]] && echo -e "\t! Warning: lzop doesn't support multithreading, falling back to 1 thread."
|
||||||
|
|
||||||
|
# Compresse au format lzo
|
||||||
|
lzop --keep -$3 $1
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
for opt in $@ ; do
|
||||||
|
case $opt in
|
||||||
|
"-h"|"--help")
|
||||||
|
echo "taz: archive all files of a directory."
|
||||||
|
echo
|
||||||
|
echo "Usage: taz [option] [--parallel=<n>] [--format=<format>] [directory1 ... directoryN]"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " -h, --help Display that help screen"
|
||||||
|
echo " -d, --delete Delete source file or directory after success"
|
||||||
|
echo " -f, --format Chose archive format in the given list. If several format are"
|
||||||
|
echo " given, the smalest is kept"
|
||||||
|
echo " -p, --parallel Number of threads to use (if allowed by underlying utility)"
|
||||||
|
echo " -v, --verbose Display progress where possible"
|
||||||
|
echo " -1, .., -9 Compression level to use [1=fast/big, 9=slow/small]"
|
||||||
|
echo
|
||||||
|
echo "Supported archive format:"
|
||||||
|
echo " Param.| programs | Algo. | Description"
|
||||||
|
echo " ------+---------------+-------+----------------------------------------"
|
||||||
|
echo " lz | plzip, lzip | lzma | Safe efficient default format"
|
||||||
|
echo " xz | xz | lzma2 | Unsafe, not for long term"
|
||||||
|
echo " bz2 | pbzip2, bzip2 | bzip2 | Historical but less efficient than lz"
|
||||||
|
echo " gz | pigz, gzip | lz77 | Historical, safe, fast"
|
||||||
|
echo " lzo | lzop | lzo | Very fast but no multithread"
|
||||||
|
echo " tar | tar | tar | No compression"
|
||||||
|
echo
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-d"|"--delete")
|
||||||
|
local willrm=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-f"?*|"--format"?*)
|
||||||
|
local compform=$(echo "$opt" | cut -f 2- -d '=')
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-p"?*|"--parallel"?*)
|
||||||
|
local nproc=$(echo "$opt" | cut -f 2- -d '=')
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-v"|"--verbose")
|
||||||
|
local verbose=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-"[1..9])
|
||||||
|
local complevel=${opt:1:1}
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-"*)
|
||||||
|
echo "Invalid option, use taz --help to display options list"
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
local LIST="$LIST ${opt%/}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ ! $compform ]] && compform=lz # safe and efficient (unless data are already compressed)
|
||||||
|
[[ ! $nproc ]] && nproc=1
|
||||||
|
[[ ! $complevel ]] && complevel=6
|
||||||
|
|
||||||
|
for item in $LIST; do
|
||||||
|
local donetar=0
|
||||||
|
echo "--- Processing $item..."
|
||||||
|
|
||||||
|
if [[ -d $item ]]; then
|
||||||
|
echo -ne "\t* Creating $item.tar... "
|
||||||
|
|
||||||
|
tar -cf $item{.tar,}
|
||||||
|
if [[ ! $? -eq 0 ]]; then
|
||||||
|
echo "[ failed, skipping ]"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
local donetar=1
|
||||||
|
echo "[ OK ]"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local fname=$item
|
||||||
|
[[ $donetar -gt 0 ]] && fname=$item.tar
|
||||||
|
|
||||||
|
# Skip compression part if tar is asked
|
||||||
|
if [[ $compform != "tar" ]]; then
|
||||||
|
echo -e "\t* Compressing archive..."
|
||||||
|
_do$compform $fname $nproc $complevel $verbose
|
||||||
|
[[ ! $? -eq 0 ]] && case $? in
|
||||||
|
127)
|
||||||
|
echo -e "\t*** Compression program unavailable, aborting."
|
||||||
|
return 127
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "\t*** Compression program returned an error, not deleting anything if asked, skipping to next item."
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[[ $donetar -gt 0 ]] && rm $fname
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $willrm ]]; then
|
||||||
|
echo -en "\t* Deleting original source as asked... "
|
||||||
|
rm -r $item && echo '[ OK ]' || echo '[ failed ]'
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "--- Done"
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
export -f taz
|
||||||
72
profile.d/debug.sh
Normal file
72
profile.d/debug.sh
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Display a backtrace
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
function backtrace ()
|
||||||
|
{
|
||||||
|
echo "========= Call stack ========="
|
||||||
|
typeset -i i=0
|
||||||
|
|
||||||
|
local func=
|
||||||
|
for func in "${FUNCNAME[@]}"; do
|
||||||
|
if [[ $i -ne 0 ]]; then
|
||||||
|
printf '%15s() %s:%d\n' \
|
||||||
|
"$func" "${BASH_SOURCE[$i]}" "${BASH_LINENO[ (( $i - 1)) ]}"
|
||||||
|
fi
|
||||||
|
let i++ || true
|
||||||
|
done
|
||||||
|
unset func i
|
||||||
|
echo "=============================="
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Function to be trapped for errors investigation
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
function error ()
|
||||||
|
{
|
||||||
|
local errcode=$?
|
||||||
|
backtrace
|
||||||
|
exit $errcode
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Activate or deactivate error trapping to display backtrace
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
settrace ()
|
||||||
|
{
|
||||||
|
local status="off"
|
||||||
|
[[ $(trap -p ERR) ]] && status="on"
|
||||||
|
trap -p ERR
|
||||||
|
for opt in $@ ; do
|
||||||
|
case $opt in
|
||||||
|
"-h"|"--help")
|
||||||
|
echo "Try to activate backtrace display for script debugging."
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " --on Activate backtrace generation"
|
||||||
|
echo " --off Deactivate backtrace generation"
|
||||||
|
echo
|
||||||
|
echo "That function active a trap event on error. If the script you want to"
|
||||||
|
echo "debug overload the ERR bash trap, it will not work."
|
||||||
|
echo
|
||||||
|
;;
|
||||||
|
"--on")
|
||||||
|
if [[ $status == "on" ]]; then
|
||||||
|
echo "Warning: ERR signal trap is already set, replacing previous trap!"
|
||||||
|
fi
|
||||||
|
trap "error" ERR
|
||||||
|
;;
|
||||||
|
"--off")
|
||||||
|
if [[ $status != "on" ]]; then
|
||||||
|
echo "Warning: ERR signal trap is already unset!"
|
||||||
|
fi
|
||||||
|
trap - ERR
|
||||||
|
;;
|
||||||
|
"--status")
|
||||||
|
echo "ERR trap signal is ${status}."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
unset status
|
||||||
|
}
|
||||||
|
export -f settrace
|
||||||
171
profile.d/filefct.sh
Normal file
171
profile.d/filefct.sh
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# expandlist : treat wildcards in a file/directory list
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
expandlist()
|
||||||
|
{
|
||||||
|
local result=""
|
||||||
|
for item in "$1"; do
|
||||||
|
for content in "$item"; do
|
||||||
|
result+="\"$content\" "
|
||||||
|
done
|
||||||
|
done
|
||||||
|
echo $result
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Clean a directory or a tree from temporary or backup files
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
clean ()
|
||||||
|
{
|
||||||
|
for opt in $@ ; do
|
||||||
|
case $opt in
|
||||||
|
"-r"|"--recurs")
|
||||||
|
local recursive=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-h"|"--help")
|
||||||
|
echo "clean: erase backup files in the given directories."
|
||||||
|
echo
|
||||||
|
echo "Usage: clean [option] [directory1] [...[directoryX]]"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " -h, --help Display that help screen"
|
||||||
|
echo " -r, --recurs Do a recursive cleaning"
|
||||||
|
echo " -f, --force Do not ask for confirmation (use with care)"
|
||||||
|
echo " -s, --shell Do nothing and display what will be executed"
|
||||||
|
echo
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-s"|"--shell")
|
||||||
|
local outshell=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-f"|"--force")
|
||||||
|
local force=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-"*)
|
||||||
|
echo "Invalid option, use \"clean --help\" to display usage."
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
local dirlist="$dirlist $opt"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ ! $dirlist ]] && local dirlist=$(pwd)
|
||||||
|
|
||||||
|
[[ ! $recursive ]] && local findopt="-maxdepth 1"
|
||||||
|
[[ ! $force ]] && local rmopt="-i"
|
||||||
|
unset recursive force
|
||||||
|
|
||||||
|
for dir in $dirlist; do
|
||||||
|
local dellist=$(find $dir $findopt -type f -name "*~" -o -name "#*#" \
|
||||||
|
-o -name "*.bak" -o -name ".~*#")
|
||||||
|
for f in $dellist; do
|
||||||
|
if [[ ! $outshell ]]; then
|
||||||
|
rm $rmopt $f
|
||||||
|
else
|
||||||
|
echo "rm $rmopt $f"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
unset outshell dirlist dellist findopt rmopt
|
||||||
|
}
|
||||||
|
export -f clean
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Create a directory then goes inside
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
mcd ()
|
||||||
|
{
|
||||||
|
if [[ ! $# -eq 1 ]] ; then
|
||||||
|
echo "Create a directory then goes inside."
|
||||||
|
echo "Usage: mcd <directory>"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
mkdir -pv $1 && cd $1
|
||||||
|
}
|
||||||
|
export -f mcd
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Rename all files in current directory to replace spaces with _
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
rmspc ()
|
||||||
|
{
|
||||||
|
local lst=""
|
||||||
|
for opt in $@ ; do
|
||||||
|
case $opt in
|
||||||
|
"-h"|"--help")
|
||||||
|
echo "rmspc: remove spaces from all filenames in current directories"
|
||||||
|
echo
|
||||||
|
echo "Usage: rmspc [option]"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " -h, --help Display that help screen"
|
||||||
|
echo " -r, --recursive Treat subdirectories of the given directory"
|
||||||
|
echo " -c, --subst-char Change the replacement character (default is underscore)"
|
||||||
|
echo " -v, --verbose Display what is being done"
|
||||||
|
echo " -s, --shell Do nothing and display commands that would be executed"
|
||||||
|
echo
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-r"|"--recursive")
|
||||||
|
local recurs=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-c"?*|"--subst-char"?*)
|
||||||
|
local substchar=$(echo "$opt" | cut -f 2- -d '=')
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-v"|"--verbose")
|
||||||
|
local verb=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-s"|"--shell")
|
||||||
|
local shell=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Invalid parameter, use \"rmspc --help\" to display options list"
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ ! $substchar ]] && substchar="_"
|
||||||
|
[[ $verb ]] && local mvopt="-v"
|
||||||
|
|
||||||
|
for f in *; do
|
||||||
|
[[ $recurs ]] && [[ -d "$f" ]] && (
|
||||||
|
[[ $verb ]] && echo "-- Entering directory $(pwd)/$f ..."
|
||||||
|
local lastdir=$f
|
||||||
|
pushd "$f" > /dev/null
|
||||||
|
rmspc $@
|
||||||
|
popd > /dev/null
|
||||||
|
[[ $verb ]] && echo "-- Leaving directory $(pwd)/$lastdir"
|
||||||
|
unset lastdir
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ $(echo $f | grep " ") ]]; then
|
||||||
|
local newf="${f// /${substchar}}"
|
||||||
|
local command="mv $mvopt \"$f\" \"$newf\""
|
||||||
|
if [[ $shell ]]; then
|
||||||
|
echo $command
|
||||||
|
else
|
||||||
|
$command
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
unset lst substchar verb shell newf command mvopt
|
||||||
|
}
|
||||||
|
export -f rmspc
|
||||||
31
profile.d/help.sh
Normal file
31
profile.d/help.sh
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Display list of commands and general informations
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
help ()
|
||||||
|
{
|
||||||
|
cat <<EOF
|
||||||
|
clean Erase backup files
|
||||||
|
dpkgs Search for the given package in the installed ones
|
||||||
|
gpid Give the list of PIDs for the given process name
|
||||||
|
isipv4 Tell if the given IPv4 is valid
|
||||||
|
isipv6 Tell if the given IPv6 is valid
|
||||||
|
mcd Create a directory and go inside
|
||||||
|
meteo Display curent weather forecast for the configured city
|
||||||
|
ppg Display process matching the given parameter
|
||||||
|
rain Let the rain fall
|
||||||
|
rmhost Remove host (IP and/or DNS name) for current known_host
|
||||||
|
rmspc Remove spaces from all the files in working directory
|
||||||
|
setc Set console language to C
|
||||||
|
setfr Set console language to French
|
||||||
|
settrace Activate/deactivate call trace for script debugging
|
||||||
|
setus Set console language to US English
|
||||||
|
showinfo Show the welcoming baner with basic system information
|
||||||
|
ssr Do a root login to the given address
|
||||||
|
taz Compress smartly the given files or directory
|
||||||
|
utaz Uncompress all zip files in the given (or current) directory
|
||||||
|
ver Display version of your copy of profile
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
export -f help
|
||||||
|
|
||||||
52
profile.d/info.sh
Normal file
52
profile.d/info.sh
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Show profile version
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
ver ()
|
||||||
|
{
|
||||||
|
echo "Profile version $PROFVERSION."
|
||||||
|
}
|
||||||
|
export -f ver
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Display weather of the given city (or default one)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
meteo ()
|
||||||
|
{
|
||||||
|
cities=$@
|
||||||
|
[[ $# -eq 0 ]] && local cities=$DEFAULT_CITY
|
||||||
|
|
||||||
|
for city in $cities; do
|
||||||
|
curl https://wttr.in/$city
|
||||||
|
done
|
||||||
|
}
|
||||||
|
export -f meteo
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Display system general information
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
showinfo()
|
||||||
|
{
|
||||||
|
echo -e "\n"
|
||||||
|
if command -v figlet >/dev/null 2>&1; then
|
||||||
|
figlet -k $(hostname)
|
||||||
|
else
|
||||||
|
echo "$(hostname -f)"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
if command -v neofetch >/dev/null 2>&1; then
|
||||||
|
neofetch
|
||||||
|
else
|
||||||
|
(
|
||||||
|
if [[ -s /etc/os-release ]]; then
|
||||||
|
. /etc/os-release
|
||||||
|
echo "$NAME $VERSION"
|
||||||
|
else
|
||||||
|
cat /proc/version
|
||||||
|
fi
|
||||||
|
echo "Uptime: $(uptime)"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
export -f showinfo
|
||||||
35
profile.d/lang.sh
Normal file
35
profile.d/lang.sh
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Change locale to French
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
setfr ()
|
||||||
|
{
|
||||||
|
# Set fr locale definitions
|
||||||
|
export LANG=fr_FR.UTF-8
|
||||||
|
export LC_MESSAGES=fr_FR.UTF-8
|
||||||
|
export LC_ALL=fr_FR.UTF-8
|
||||||
|
}
|
||||||
|
export -f setfr
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Change locale to C standard
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
setc ()
|
||||||
|
{
|
||||||
|
# Locale definitions
|
||||||
|
export LANG=C
|
||||||
|
export LC_MESSAGES=C
|
||||||
|
export LC_ALL=C
|
||||||
|
}
|
||||||
|
export -f setc
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Change locale to US (needed by Steam)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
setus ()
|
||||||
|
{
|
||||||
|
# Locale definitions
|
||||||
|
export LANG=en_US.UTF-8
|
||||||
|
export LC_MESSAGES=en_US.UTF-8
|
||||||
|
export LC_ALL=en_US.UTF-8
|
||||||
|
}
|
||||||
|
export -f setus
|
||||||
49
profile.d/net.sh
Normal file
49
profile.d/net.sh
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Determine if parameter is a valid IPv4 address
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
isipv4 ()
|
||||||
|
{
|
||||||
|
# Set up local variables
|
||||||
|
local ip=$1
|
||||||
|
|
||||||
|
# Start with a regex format test
|
||||||
|
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
||||||
|
local old_ifs=$IFS
|
||||||
|
IFS="."
|
||||||
|
ip=($ip)
|
||||||
|
IFS=$old_ifs
|
||||||
|
if [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
|
||||||
|
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]; then
|
||||||
|
if [[ -t 1 ]]; then
|
||||||
|
echo "The given IPv4 is valid."
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -t 1 ]]; then
|
||||||
|
echo "The given parameter is NOT a valid IPv4."
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
export -f isipv4
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Determine if parameter is a valid IPv4 address
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
isipv6 ()
|
||||||
|
{
|
||||||
|
local ip="$1"
|
||||||
|
local regex='^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$'
|
||||||
|
if [[ $ip =~ $regex ]]; then
|
||||||
|
if [[ -t 1 ]]; then
|
||||||
|
echo "The given IPv6 is valid."
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [[ -t 1 ]]; then
|
||||||
|
echo "The given parameter is not a valid IPv6."
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
export -f isipv6
|
||||||
42
profile.d/packages.sh
Normal file
42
profile.d/packages.sh
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Look for a package within installed one
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
dpkgs ()
|
||||||
|
{
|
||||||
|
local count=0
|
||||||
|
for opt in $@ ; do
|
||||||
|
case $opt in
|
||||||
|
"-h"|"--help")
|
||||||
|
echo "dpkgs: look for an installed package by it's name."
|
||||||
|
echo
|
||||||
|
echo "Usage: dpkgs <string>"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
"-"*)
|
||||||
|
echo "Invalid option, use \"dpkgs --help\" to display usage."
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
local pkg=$1 && shift
|
||||||
|
count=$(( $count + 1 ))
|
||||||
|
[[ $count -gt 1 ]] &&
|
||||||
|
echo "*** Error: Please specify a package name, without space, eventually partial." &&
|
||||||
|
return 1
|
||||||
|
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
[[ $count -lt 1 ]] &&
|
||||||
|
echo "*** Error: Please specify a package name, without space, eventually partial." &&
|
||||||
|
return 1
|
||||||
|
|
||||||
|
[[ -x /usr/sbin/dpkg ]] &&
|
||||||
|
echo "*** Error: dpkg command seems unavialable." &&
|
||||||
|
return 2
|
||||||
|
|
||||||
|
dpkg -l | grep $pkg
|
||||||
|
}
|
||||||
|
export -f dpkgs
|
||||||
40
profile.d/processes.sh
Normal file
40
profile.d/processes.sh
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Search processes matching the given string
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
ppg ()
|
||||||
|
{
|
||||||
|
ps -edf | grep $@ | grep -v "grep $@"
|
||||||
|
}
|
||||||
|
export -f ppg
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Get PID list of the given process name
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
gpid ()
|
||||||
|
{
|
||||||
|
[[ $UID -eq 0 ]] && local psopt="-A"
|
||||||
|
[[ $# -eq 1 ]] && local single=1
|
||||||
|
for pid in $@; do
|
||||||
|
local result=$(ps $psopt | grep $pid | awk '{print $1}' | sed "s/\n/ /")
|
||||||
|
if [[ $single ]]; then
|
||||||
|
[[ $result ]] && echo "${result//$'\n'/ }"
|
||||||
|
else
|
||||||
|
[[ $result ]] && echo "$pid: ${result//$'\n'/ }"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
[[ $result ]] || return 1
|
||||||
|
}
|
||||||
|
export -f gpid
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Kill all processes owned by the given users
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
ku ()
|
||||||
|
{
|
||||||
|
for u in $@; do
|
||||||
|
killall -u $u
|
||||||
|
done
|
||||||
|
}
|
||||||
|
export -f ku
|
||||||
90
profile.d/prompt.sh
Normal file
90
profile.d/prompt.sh
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# timer_* functions : internal timing function for prompt
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
function timer_now
|
||||||
|
{
|
||||||
|
date +%s%N
|
||||||
|
}
|
||||||
|
|
||||||
|
function timer_start
|
||||||
|
{
|
||||||
|
timer_start=${timer_start:-$(timer_now)}
|
||||||
|
}
|
||||||
|
|
||||||
|
function timer_stop
|
||||||
|
{
|
||||||
|
local delta_us=$((($(timer_now) - $timer_start) / 1000))
|
||||||
|
local us=$((delta_us % 1000))
|
||||||
|
local ms=$(((delta_us / 1000) % 1000))
|
||||||
|
local s=$(((delta_us / 1000000) % 60))
|
||||||
|
local m=$(((delta_us / 60000000) % 60))
|
||||||
|
local h=$((delta_us / 3600000000))
|
||||||
|
# Goal: always show around 3 digits of accuracy
|
||||||
|
if ((h > 0)); then
|
||||||
|
timer_show=${h}h${m}m
|
||||||
|
elif ((m > 0)); then
|
||||||
|
timer_show=${m}m${s}s
|
||||||
|
elif ((s >= 10)); then
|
||||||
|
timer_show=${s}.$((ms / 100))s
|
||||||
|
elif ((s > 0)); then
|
||||||
|
timer_show=${s}.$(printf %03d $ms)s
|
||||||
|
elif ((ms >= 100)); then
|
||||||
|
timer_show=${ms}ms
|
||||||
|
elif ((ms > 0)); then
|
||||||
|
timer_show=${ms}.$((us / 100))ms
|
||||||
|
else
|
||||||
|
timer_show=${us}us
|
||||||
|
fi
|
||||||
|
unset timer_start
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Function triguered internaly by bash : defining prompt
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
set_prompt ()
|
||||||
|
{
|
||||||
|
Last_Command=$? # Must come first!
|
||||||
|
Blue='\[\e[0;34m\]'
|
||||||
|
White='\[\e[01;37m\]'
|
||||||
|
Yellow='\[\e[01;93m\]'
|
||||||
|
Red='\[\e[01;31m\]'
|
||||||
|
Green='\[\e[01;32m\]'
|
||||||
|
OnGrey='\[\e[47m\]'
|
||||||
|
OnRed='\[\e[41m\]'
|
||||||
|
OnBlue='\[\e[44m\]'
|
||||||
|
ICyan='\[\e[0;96m\]'
|
||||||
|
Default='\[\e[00m\]'
|
||||||
|
FancyX='\342\234\227'
|
||||||
|
Checkmark='\342\234\223'
|
||||||
|
|
||||||
|
# Begin with time
|
||||||
|
PS1="\[\e[s$Blue$OnGrey [ \t ] $OnBlue"
|
||||||
|
|
||||||
|
# Add a bright white exit status for the last command
|
||||||
|
|
||||||
|
# If it was successful, print a green check mark. Otherwise, print
|
||||||
|
# a red X.
|
||||||
|
if [[ $Last_Command == 0 ]]; then
|
||||||
|
PS1+="$White$OnBlue [ \$Last_Command "
|
||||||
|
PS1+="$Green$Checkmark "
|
||||||
|
else
|
||||||
|
PS1+="$White$OnRed [ \$Last_Command "
|
||||||
|
PS1+="$Yellow$FancyX "
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add the ellapsed time and current date
|
||||||
|
timer_stop
|
||||||
|
PS1+="($timer_show)$White ] $OnBlue "
|
||||||
|
|
||||||
|
# If root, just print the host in red. Otherwise, print the current user
|
||||||
|
# and host in green.
|
||||||
|
if [[ $EUID -eq 0 ]]; then
|
||||||
|
PS1+="$Red\\u$Green@\\h"
|
||||||
|
else
|
||||||
|
PS1+="$Green\\u@\\h"
|
||||||
|
fi
|
||||||
|
PS1+="\e[K\e[u$Default\n"
|
||||||
|
# Print the working directory and prompt marker in blue, and reset
|
||||||
|
# the text color to the default.
|
||||||
|
PS1+="$ICyan\\w \\\$$Default "
|
||||||
|
}
|
||||||
119
profile.d/rain.sh
Normal file
119
profile.d/rain.sh
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Let the rain fall
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
rain()
|
||||||
|
{
|
||||||
|
local exit_st=0
|
||||||
|
local rain_cars=("|" "│" "┃" "┆" "┇" "┊" "┋" "╽" "╿")
|
||||||
|
local rain_colors=("\e[37m" "\e[37;1m")
|
||||||
|
# More from 256 color mode
|
||||||
|
for i in {244..255}; do
|
||||||
|
rain_colors=( "${rain_colors[@]}" "\e[38;5;${i}m" )
|
||||||
|
done
|
||||||
|
local rain_tab=${#rain_cars[@]}
|
||||||
|
local rain_color_tab=${#rain_colors[@]}
|
||||||
|
local num_rain_metadata=5
|
||||||
|
local term_height=$(tput lines)
|
||||||
|
local term_width=$(tput cols)
|
||||||
|
local step_duration=0.050
|
||||||
|
local X=0 Y=0 drop_length=0 rain_drop=0
|
||||||
|
local max_rain_width=0 new_rain_odd=0 falling_odd=0
|
||||||
|
|
||||||
|
|
||||||
|
sigwinch() {
|
||||||
|
term_width=$(tput cols)
|
||||||
|
term_height=$(tput lines)
|
||||||
|
#step_duration=0.025
|
||||||
|
(( max_rain_width = term_width * term_height / 4 ))
|
||||||
|
(( max_rain_height = term_height < 10 ? 1 : term_height / 10 ))
|
||||||
|
# In percentage
|
||||||
|
(( new_rain_odd = term_height > 50 ? 100 : term_height * 2 ))
|
||||||
|
(( new_rain_odd = new_rain_odd * 75 / 100 ))
|
||||||
|
(( falling_odd = term_height > 25 ? 100 : term_height * 4 ))
|
||||||
|
(( falling_odd = falling_odd * 90 / 100 ))
|
||||||
|
}
|
||||||
|
|
||||||
|
do_exit() {
|
||||||
|
exit_st=1
|
||||||
|
}
|
||||||
|
|
||||||
|
do_render() {
|
||||||
|
# Clean screen first
|
||||||
|
local idx=0
|
||||||
|
for ((idx = 0; idx < num_rains * num_rain_metadata; idx += num_rain_metadata)); do
|
||||||
|
X=${rains[idx]}
|
||||||
|
Y=${rains[idx + 1]}
|
||||||
|
drop_length=${rains[idx + 4]}
|
||||||
|
for ((y = Y; y < Y + drop_length; y++)); do
|
||||||
|
(( y < 1 || y > term_height )) && continue
|
||||||
|
echo -ne "\e[${y};${X}H "
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
for ((idx = 0; idx < num_rains * num_rain_metadata; idx += num_rain_metadata)); do
|
||||||
|
if (( 100 * RANDOM / 32768 < falling_odd )); then
|
||||||
|
# Falling
|
||||||
|
if (( ++rains[idx + 1] > term_height )); then
|
||||||
|
# Out of screen, bye sweet <3
|
||||||
|
rains=("${rains[@]:0:idx}"
|
||||||
|
"${rains[@]:idx+num_rain_metadata:num_rains*num_rain_metadata}")
|
||||||
|
(( num_rains-- ))
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
X=${rains[idx]}
|
||||||
|
Y=${rains[idx + 1]}
|
||||||
|
rain_drop=${rains[idx + 2]}
|
||||||
|
drop_color=${rains[idx + 3]}
|
||||||
|
drop_length=${rains[idx + 4]}
|
||||||
|
for ((y = Y; y < Y + drop_length; y++)); do
|
||||||
|
(( y < 1 || y > term_height )) && continue
|
||||||
|
echo -ne "\e[${y};${X}H${drop_color}${rain_drop}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
trap do_exit TERM INT
|
||||||
|
trap sigwinch WINCH
|
||||||
|
# No echo stdin and hide the cursor
|
||||||
|
stty -echo
|
||||||
|
echo -ne "\e[?25l"
|
||||||
|
|
||||||
|
echo -ne "\e[2J"
|
||||||
|
local rains=()
|
||||||
|
local num_rains=0
|
||||||
|
sigwinch
|
||||||
|
while (( exit_st <= 0 )); do
|
||||||
|
if (( $exit_st <=0 )); then
|
||||||
|
read -n 1 -t $step_duration ch
|
||||||
|
case "$ch" in
|
||||||
|
q|Q)
|
||||||
|
do_exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if (( num_rains < max_rain_width )) && (( 100 * RANDOM / 32768 < new_rain_odd )); then
|
||||||
|
# Need new |, 1-based
|
||||||
|
rain_drop="${rain_cars[rain_tab * RANDOM / 32768]}"
|
||||||
|
drop_color="${rain_colors[rain_color_tab * RANDOM / 32768]}"
|
||||||
|
drop_length=$(( max_rain_height * RANDOM / 32768 + 1 ))
|
||||||
|
X=$(( term_width * RANDOM / 32768 + 1 ))
|
||||||
|
Y=$(( 1 - drop_length ))
|
||||||
|
rains=( "${rains[@]}" "$X" "$Y" "$rain_drop" "$drop_color" "$drop_length" )
|
||||||
|
(( num_rains++ ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Let rain fall!
|
||||||
|
do_render
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo -ne "\e[${term_height};1H\e[0K"
|
||||||
|
|
||||||
|
# Show cursor and echo stdin
|
||||||
|
echo -ne "\e[?25h"
|
||||||
|
stty echo
|
||||||
|
unset exit_st
|
||||||
|
trap - TERM INT
|
||||||
|
trap - WINCH
|
||||||
|
}
|
||||||
|
export -f rain
|
||||||
70
profile.d/ssh.sh
Normal file
70
profile.d/ssh.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Remove host from know_host (name and IP) for the active user
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
rmhost ()
|
||||||
|
{
|
||||||
|
if [[ "$#" -lt 1 ]]; then
|
||||||
|
echo "Error: incorrect number of parameters."
|
||||||
|
echo "Usage: rmhost <hostname|ip> [hostname2|ip2 [...]]"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ $1 ]]; do
|
||||||
|
local hst=$1 && shift
|
||||||
|
isipv4 $hst > /dev/null
|
||||||
|
local v4=$?
|
||||||
|
isipv6 $hst > /dev/null
|
||||||
|
local v6=$?
|
||||||
|
|
||||||
|
if [[ $v4 -eq 0 || $v6 -eq 0 ]]; then
|
||||||
|
local ip=$hst
|
||||||
|
unset hst
|
||||||
|
fi
|
||||||
|
unset v4 v6
|
||||||
|
|
||||||
|
if [[ ! $ip && $hst ]]; then
|
||||||
|
ip=$(host $hst | grep "has address" | awk '{print $NF}')
|
||||||
|
[[ ! $? ]] &&
|
||||||
|
echo "*** rmhost(): Error extracting IP from hostname." &&
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $hst ]]; then
|
||||||
|
echo "Removing host $hst from ssh known_host..."
|
||||||
|
ssh-keygen -R $hst > /dev/null
|
||||||
|
fi
|
||||||
|
if [[ $ip ]]; then
|
||||||
|
echo "Removing IP $ip from ssh known_host..."
|
||||||
|
ssh-keygen -R $ip > /dev/null
|
||||||
|
fi
|
||||||
|
unset hst ip
|
||||||
|
done
|
||||||
|
}
|
||||||
|
export -f rmhost
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Login root via SSH on the given machine
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
ssr ()
|
||||||
|
{
|
||||||
|
for opt in $@ ; do
|
||||||
|
case $opt in
|
||||||
|
"-h"|"--help")
|
||||||
|
echo "ssr: do a root user ssh login."
|
||||||
|
echo
|
||||||
|
echo "Usage: ssr <server [ssh options]>"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ ! $1 ]] &&
|
||||||
|
echo "Please specify the server you want to log in." &&
|
||||||
|
return 1
|
||||||
|
|
||||||
|
local srv=$1 && shift
|
||||||
|
|
||||||
|
ssh -Y root@$srv $@
|
||||||
|
}
|
||||||
|
export -f ssr
|
||||||
1106
profile.sh
1106
profile.sh
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user