From 76c5ffe1f84e8b9e3596ab29b0abc8a2a1beae50 Mon Sep 17 00:00:00 2001 From: Andre Ramnitz Date: Sun, 10 Dec 2023 21:17:58 +0100 Subject: [PATCH] bin: recover lost file data from btrfs snapshot --- bin/.local/bin/16.c | 24 ++++++ bin/.local/bin/16c | Bin 0 -> 15504 bytes bin/.local/bin/256colors2.pl | 129 ++++++++++++++++++++++++++++++ bin/.local/bin/_emergeworld | 14 ++++ bin/.local/bin/best_makeopts.sh | 17 ++++ bin/.local/bin/colors | 62 +++++++++++++++ bin/.local/bin/colr | 132 +++++++++++++++++++++++++++++++ bin/.local/bin/deadlib | 3 + bin/.local/bin/foot | 2 + bin/.local/bin/loadcolors.sh | 3 + bin/.local/bin/mkchroot | 68 ++++++++++++++++ bin/.local/bin/tasks_redirect.sh | 60 ++++++++++++++ bin/.local/bin/winecleaner | 31 ++++++++ 13 files changed, 545 insertions(+) create mode 100644 bin/.local/bin/16.c create mode 100755 bin/.local/bin/16c create mode 100755 bin/.local/bin/256colors2.pl create mode 100644 bin/.local/bin/_emergeworld create mode 100755 bin/.local/bin/colors create mode 100755 bin/.local/bin/loadcolors.sh diff --git a/bin/.local/bin/16.c b/bin/.local/bin/16.c new file mode 100644 index 00000000..325f2d02 --- /dev/null +++ b/bin/.local/bin/16.c @@ -0,0 +1,24 @@ +#include + +static void aput( char* c, char bg_col, char fg_col ) +{ int bg, fg; + if( bg_col > 7 ) bg = 100 + bg_col-8; + else bg = 40 + bg_col; + if( fg_col > 7 ) fg = 90 + fg_col-8; + else fg = 30 + fg_col; + printf( "\033[%i;%im%s\033[0;0m", fg, bg, c ); +} + +int main( void ) +{ int bg, fg; + + for( fg = 0; fg < 8; fg += 1 ) aput(" ", fg, 0); putchar('\n'); + for( fg = 8; fg < 16; fg += 1 ) aput(" ", fg, 0); putchar('\n'); + putchar('\n'); + for( bg = 0; bg < 16; bg += 1 ) + { for( fg = 0; fg < 16; fg += 1 ) + { aput( "10", bg, fg ); } + putchar('\n'); + } +} + diff --git a/bin/.local/bin/16c b/bin/.local/bin/16c new file mode 100755 index 0000000000000000000000000000000000000000..76c10fbd8c92e02984929fc811ade8686901bfdb GIT binary patch literal 15504 zcmeHOYit}>6~4PpYSSj(O+-{TZqfl_HLdVu*Kv%C<$7&r?J=?w*R@elN+%od+Fs#( zXm<=wgoBFaDQ6wY~LhY86B(AFBs6sN4kd`VH8^R+I4>`hkIp^MU z#^Z@MLj40sbETQ@p2v6ZnKO5GW_QkhDLUBa_xS|38u7G1=~Pf@B4h|2p$dDU7w1_X^!&~YGdI~quK z;}XTm$aZ@^4av|nxwr8EIzVG|@-UR;W@#47ottr(<~u>iJQR^vB3_AjHqv}0Le3}V z1h;m|ryE0H!^Y_5O%czHnq=9BYv=yi_pSH`nQxeQ8V&5mR+^8I&-F9Fqf<*B_Xj@B zBQ#&N^AMu^Gg4Z`q3Pu5w$?+_@#g7ddSlME`^(1tOg9sRLk%K7vo*20E%b(}9iPw5b^CEiIPR%^)Hy@l~ZRrDjE*S7F~ zvWkDYivL^{eIw{U3fny`J7bMc#d5+lA;aTl-iqZcGZjmwK{GxZGbfVi*mUx2LS%Ev zv^62n3)9{v`UeMkdd(L7aI4*I(T@moV06fgCvu6&WZp{TMu&Q*GwH-=?DTX3hMY`g z(lm*wT(@+DF#T{oe6WWzDffO61}(3nAHVVqI4w1zgLE@{laN}!=%WMV>zl8u>@HwivG8Wy zCHp`sN8SQcrRi)rIaP4`c@Sd@7 zPa2JAk2dHXUbd~Uv5zIhUyaSTYjW)$Yig*%1i!dvIZ zZk&&n=I3tIp4$<4EqY_2_*@~ndh0>eKM4K#xstM#7K$T<=$f=ae?Rn%#i8=z*y>_* zt#BDK_wjl-xWbj6Vp7W|*DIBaOP6TM;Fahas&8rF9C)qxGZZALPLax|Aijm@nr~rl zt@hmY*B=CXxfaF%B7Rr7m-wrla<=m08^iz;-}zUiqK0@AdRL;WINhzMIf#$QAeI-S zs}PEe;%hY6b(oQ&2%P(k8sY^QVj;Q;k*x;K{aha1(j~cmH?3Hl!fRdzybO35@G{_K zz{`M_0WSky2D}V-8SpaT&H%paYCPGL>}X1+n(~b&Lmi=%(4dKM2z`BxH68daR=!)h zU8&4NKLq$)zzE&>p8#+5NjS4 z-Sxq*`g?ai;7>zD%Kk-Am%zTV$^NdiqsnVu2D}V-8SpaTWx&gTmjN#WUIx4jcp3O# z%mCLNa-AW*n8k**jM#Q4unQaEeVc4WDjt1=WUgn#I!%|P!$I9>O31jmNk4yiD1+N>nVtMXXb<@vO z(WgPL!RBs10EGstCK%alc?rZI=rx!A70~bY2LxYt%);wnt9ZT-dK||+{!c)!!RBt4 zL9xr=yO*|3T!BEui~7Z0PSkuD_Ch zna-p9O$BtTuwguI|7|`y6!6$+`$5lhZD@sf3iP}EaQ0p6RfOC0aS?;+a$z3*%(3pF zfnKQohDv)gYM6Z^-9u5+I65NC{=wrt-Gk=wzP@LpqvmLL&tTLPRFfXz3UgUj?ygU_ ztx$h{-%r@hzm23 zhMjpjpC>LA%|pSv89jE?ykB|y=F5P@o zC(|=}HkZjJa@HAAb@vQ3Td_$YZBw!Ql+fd6(lDMvE2k`+=NXH{$Ip8_ zcINZ__S2xldnNPvxq*?N6Tn3_cmAFSE#8xv&-YA3HOo6;O74b446OWYnt+8Y*nJYck^Edi<5ssQ?86}+f3Erys>%- zI#9_cuOZa&b3Fh5&F#-JT@eg2e^7(nM{2%i1`NhfS=dEB!P04X`06Z_t zccFtij$ex?i$;96Kcz!C!G0Y!)RDWbXMT&VQ61(xk=LHn^#l!=B_rO4@IJxu@aHdH f9~`@rf0ZWg;)%%U65-i$Ykn;){8|^mC5nFon79vs literal 0 HcmV?d00001 diff --git a/bin/.local/bin/256colors2.pl b/bin/.local/bin/256colors2.pl new file mode 100755 index 00000000..2a880bdc --- /dev/null +++ b/bin/.local/bin/256colors2.pl @@ -0,0 +1,129 @@ +#!/usr/bin/perl +# $XTermId: 256colors2.pl,v 1.10 2009/10/10 14:45:26 tom Exp $ +# ----------------------------------------------------------------------------- +# this file is part of xterm +# +# Copyright 1999-2007,2009 by Thomas E. Dickey +# Copyright 2002 by Steve Wall +# Copyright 1999 by Todd Larason +# +# All Rights Reserved +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name(s) of the above copyright +# holders shall not be used in advertising or otherwise to promote the +# sale, use or other dealings in this Software without prior written +# authorization. +# ----------------------------------------------------------------------------- +# +# use the resources for colors 0-15 - usually more-or-less a +# reproduction of the standard ANSI colors, but possibly more +# pleasing shades + +use strict; + +use Getopt::Std; + +our ($opt_h, $opt_q, $opt_r); +&getopts('hqr') || die("Usage: $0 [-q] [-r]"); +die("Usage: $0 [options]\n +Options: + -h display this message + -q quieter output by merging all palette initialization + -r display the reverse of the usual palette +") if ( $opt_h); + +our ($red, $green, $blue); +our ($gray, $level, $color); + +sub map_cube($) { + my $value = $_[0]; + $value = (5 - $value) if defined($opt_r); + return $value; +} + +sub map_gray($) { + my $value = $_[0]; + $value = (23 - $value) if defined($opt_r); + return $value; +} + +printf("\x1b]4") if ($opt_q); +# colors 16-231 are a 6x6x6 color cube +for ($red = 0; $red < 6; $red++) { + for ($green = 0; $green < 6; $green++) { + for ($blue = 0; $blue < 6; $blue++) { + printf("\x1b]4") unless ($opt_q); + printf(";%d;rgb:%2.2x/%2.2x/%2.2x", + 16 + (map_cube($red) * 36) + (map_cube($green) * 6) + map_cube($blue), + ($red ? ($red * 40 + 55) : 0), + ($green ? ($green * 40 + 55) : 0), + ($blue ? ($blue * 40 + 55) : 0)); + printf("\x1b\\") unless ($opt_q); + } + } +} + +# colors 232-255 are a grayscale ramp, intentionally leaving out +# black and white +for ($gray = 0; $gray < 24; $gray++) { + $level = (map_gray($gray) * 10) + 8; + printf("\x1b]4") unless ($opt_q); + printf(";%d;rgb:%2.2x/%2.2x/%2.2x", + 232 + $gray, $level, $level, $level); + printf("\x1b\\") unless ($opt_q); +} +printf("\x1b\\") if ($opt_q); + + +# display the colors + +# first the system ones: +print "System colors:\n"; +for ($color = 0; $color < 8; $color++) { + print "\x1b[48;5;${color}m "; +} +print "\x1b[0m\n"; +for ($color = 8; $color < 16; $color++) { + print "\x1b[48;5;${color}m "; +} +print "\x1b[0m\n\n"; + +# now the color cube +print "Color cube, 6x6x6:\n"; +for ($green = 0; $green < 6; $green++) { + for ($red = 0; $red < 6; $red++) { + for ($blue = 0; $blue < 6; $blue++) { + $color = 16 + ($red * 36) + ($green * 6) + $blue; + print "\x1b[48;5;${color}m "; + } + print "\x1b[0m "; + } + print "\n"; +} + + +# now the grayscale ramp +print "Grayscale ramp:\n"; +for ($color = 232; $color < 256; $color++) { + print "\x1b[48;5;${color}m "; +} +print "\x1b[0m\n"; diff --git a/bin/.local/bin/_emergeworld b/bin/.local/bin/_emergeworld new file mode 100644 index 00000000..b924b086 --- /dev/null +++ b/bin/.local/bin/_emergeworld @@ -0,0 +1,14 @@ +#!/bin/bash + +case "$1" in + "start") + date +%s > $HOME/.cache/emergestart && emerge -e --keep-going @world + ;; + "resume") + starttime=$(cat $HOME/.cache/emergestart) + + eix '-I*' --format '' | cut -f1,3 >tmplist + echo $starttime >>tmplist + sort -n tmplist | sed -e/$starttime/q | sed -e'/[0-9]*\t*/s///' | sort | comm -23 - <(sort omitlist) | comm -23 - <(sort /etc/portage/profile/package.provided) >buildlist + rm tmplist + emerge -a `cat buildlist` --keep-going diff --git a/bin/.local/bin/best_makeopts.sh b/bin/.local/bin/best_makeopts.sh index e69de29b..865e283f 100755 --- a/bin/.local/bin/best_makeopts.sh +++ b/bin/.local/bin/best_makeopts.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +cpupower frequency-set -g performance -r + +PACKAGE="kde-frameworks/plasma" + +DISTDIR="/tmp/" emerge -f ${PACKAGE} + +for i in {1..32} +do + echo 1 > /proc/sys/vm/drop_caches + time DISTDIR="/tmp" EMERGE_DEFAULT_OPTS="" MAKEOPTS="-j${i}" emerge -q1OB ${PACKAGE} + echo -ne "\n\n\n" +done + +cpupower frequency-set -g schedutil -r + diff --git a/bin/.local/bin/colors b/bin/.local/bin/colors new file mode 100755 index 00000000..b6b71325 --- /dev/null +++ b/bin/.local/bin/colors @@ -0,0 +1,62 @@ +#! /bin/bash +set -e + + +mainFunction () { + echo + printColors + printGuidelines +} + + +printColor () { + local color="${1}" + + printf "\033[1;4%sm " "${color}" + printf "\033[0m " + printf "\033[1;3%smSampleText " "${color}" + printf "\033[0;3%smSampleText " "${color}" + printf "\033[0m\n" +} + + +printColors () { + local color + # 0 black + # 1 red + # 2 green + # 3 yellow + # 4 blue + # 5 magenta / orange + # 6 cyan / purple + # 7 white + + for color in 0 7; do + printColor "${color}" + done + echo + + for color in 4 5 6; do + printColor "${color}" + done + echo + + for color in 2 3 1; do + printColor "${color}" + done + echo +} + + +printGuidelines () { + echo "A good palette has:" + echo "- All colors easy to read." + echo "- Similar eye catchiness within the same group, except for monochromes." + echo "- Similar or greater eye catchiness in upper groups, including this text." + echo "- Similar color within the same line." + echo "- The last group as: green yellow red." + echo +} + + +mainFunction diff --git a/bin/.local/bin/colr b/bin/.local/bin/colr index e69de29b..90c0b059 100755 --- a/bin/.local/bin/colr +++ b/bin/.local/bin/colr @@ -0,0 +1,132 @@ +#!/bin/bash + +case $1 in + 1) + set -e + + + mainFunction () { + echo + printColors + printGuidelines + } + + + printColor () { + local color="${1}" + + printf "\033[1;4%sm " "${color}" + printf "\033[0m " + printf "\033[1;3%smSampleText " "${color}" + printf "\033[0;3%smSampleText " "${color}" + printf "\033[0m\n" + } + + + printColors () { + local color + # 0 black + # 1 red + # 2 green + # 3 yellow + # 4 blue + # 5 magenta / orange + # 6 cyan / purple + # 7 white + + for color in 0 7; do + printColor "${color}" + done + echo + + for color in 4 5 6; do + printColor "${color}" + done + echo + + for color in 2 3 1; do + printColor "${color}" + done + echo + } + + + printGuidelines () { + echo "A good palette has:" + echo "- All colors easy to read." + echo "- Similar eye catchiness within the same group, except for monochromes." + echo "- Similar or greater eye catchiness in upper groups, including this text." + echo "- Similar color within the same line." + echo "- The last group as: green yellow red." + echo + } + + + mainFunction;; + + 2) + echo -e "\033[0mNC (No color)" + echo -e "\033[1;37mWHITE\t\033[0;30mBLACK" + echo -e "\033[0;34mBLUE\t\033[1;34mLIGHT_BLUE" + echo -e "\033[0;32mGREEN\t\033[1;32mLIGHT_GREEN" + echo -e "\033[0;36mCYAN\t\033[1;36mLIGHT_CYAN" + echo -e "\033[0;31mRED\t\033[1;31mLIGHT_RED" + echo -e "\033[0;35mPURPLE\t\033[1;35mLIGHT_PURPLE" + echo -e "\033[0;33mYELLOW\t\033[1;33mLIGHT_YELLOW" + echo -e "\033[1;30mGRAY\t\033[0;37mLIGHT_GRAY";; + 3) + # Description: + # + # Prints a color table of 8bg * 8fg * 2 states (regular/bold) + # + # Copyright: + # + # (C) 2009 Wolfgang Frisch + # + # License: + # + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by + # the Free Software Foundation, either version 3 of the License, or + # (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + + echo + echo Table for 16-color terminal escape sequences. + echo Replace ESC with \\033 in bash. + echo + echo "Background | Foreground colors" + echo "---------------------------------------------------------------------" + for((bg=40;bg<=47;bg++)); do + for((bold=0;bold<=1;bold++)) do + echo -en "\033[0m"" ESC[${bg}m | " + for((fg=30;fg<=37;fg++)); do + if [ $bold == "0" ]; then + echo -en "\033[${bg}m\033[${fg}m [${fg}m " + else + echo -en "\033[${bg}m\033[1;${fg}m [1;${fg}m" + fi + done + echo -e "\033[0m" + done + echo "--------------------------------------------------------------------- " + done + + echo + echo;; + 4) + for colour in {1..225} + do echo -en "\033[38;5;${colour}m38;5;${colour} \n" + done | column -x;; + *) + colr 1 + echo "Enter a number [1-4] to specify, which demo to run.";; +esac + diff --git a/bin/.local/bin/deadlib b/bin/.local/bin/deadlib index e69de29b..1ccf1884 100755 --- a/bin/.local/bin/deadlib +++ b/bin/.local/bin/deadlib @@ -0,0 +1,3 @@ +#!/bin/bash +lsof | grep 'DEL.*lib' | cut -f 1 -d ' ' | sort -u; + diff --git a/bin/.local/bin/foot b/bin/.local/bin/foot index e69de29b..d02110ac 100755 --- a/bin/.local/bin/foot +++ b/bin/.local/bin/foot @@ -0,0 +1,2 @@ +#!/bin/sh +foot -L /usr/bin/fish diff --git a/bin/.local/bin/loadcolors.sh b/bin/.local/bin/loadcolors.sh new file mode 100755 index 00000000..5a4a1dd8 --- /dev/null +++ b/bin/.local/bin/loadcolors.sh @@ -0,0 +1,3 @@ +#!/bin/sh +openrgb -p simple + diff --git a/bin/.local/bin/mkchroot b/bin/.local/bin/mkchroot index e69de29b..6a5f0b24 100755 --- a/bin/.local/bin/mkchroot +++ b/bin/.local/bin/mkchroot @@ -0,0 +1,68 @@ +#!/bin/bash + +if [ "$UID" != "0" ] +then + echo "You have to be root" >&2 + exit 1 +fi + +CHROOT=$1 + +if [ ! -f $CHROOT.in ] +then + for mnt in /dev /dev/pts /proc /sys + do + echo "-- Mounting $mnt on $CHROOT/$mnt" + mount -o bind $mnt $CHROOT/$mnt || exit 1 + done + + if [ -f $CHROOT.shared ] + then + cat $CHROOT.shared | while read entry + do + folder=${entry%:*} + mnt=${entry#*:} + + echo "-- Mounting $folder on $CHROOT/$mnt" + mkdir -p $CHROOT/$mnt || exit 1 + mount -o bind $folder $CHROOT/$mnt || exit 1 + done + fi + + echo "1" > $CHROOT.in +else + n=`cat $CHROOT.in` + let n=$n+1 + echo "$n" > $CHROOT.in +fi + +echo "-- Entering chroot" +chroot $CHROOT /usr/bin/env HOME=/root TERM=$TERM /bin/bash --login +h || exit 1; + +n=`cat $CHROOT.in` +let n=$n-1 + +if [ "$n" = "0" ] +then + for umnt in /sys /proc /dev/pts /dev + do + echo "-- Umounting $CHROOT/$umnt" + umount $CHROOT/$umnt || exit 1 + done + + if [ -f $CHROOT.shared ] + then + cat $CHROOT.shared | while read entry + do + mnt=${entry#*:} + + echo "-- Umounting $CHROOT/$mnt" + umount $CHROOT/$mnt || exit 1 + done + fi + + rm $CHROOT.in +else + echo "$n" > $CHROOT.in +fi + diff --git a/bin/.local/bin/tasks_redirect.sh b/bin/.local/bin/tasks_redirect.sh index e69de29b..904b071f 100755 --- a/bin/.local/bin/tasks_redirect.sh +++ b/bin/.local/bin/tasks_redirect.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +echo "mounting the cpuset filesystem" +if ! [ -d /dev/cpuset ]; then + mkdir /dev/cpuset + mount -t cpuset cpuset /dev/cpuset +fi + +_prefix="" + +if [ -f /dev/cpuset/cpuset.cpus ];then + _prefix="cpuset." +fi + +if ! [ -d /dev/cpuset/theUgly ]; then + echo "Creating theUgly" + mkdir /dev/cpuset/theUgly +fi + +echo "Assigning CCX0's cores to the ugly cpu set" +/bin/echo 8-15,24-31 > /dev/cpuset/theUgly/${_prefix}cpus + +echo "Giving the Ugly memory node 0" +/bin/echo 0 > /dev/cpuset/theUgly/${_prefix}mems + +echo "Making the Ugly cpu exlusive" +/bin/echo 1 > /dev/cpuset/theUgly/${_prefix}cpu_exclusive + +echo "Redirecting Processes" +while read p; do + echo "Redirecting PID $p" + /bin/echo $p > /dev/cpuset/theUgly/tasks +done < /dev/cpuset/tasks + +if ! [ -d /dev/cpuset/theGood ]; then + echo "Creating theGood" + mkdir /dev/cpuset/theGood +fi + +echo "Assigning CCX1's cores to the Good cpu set" +/bin/echo 0-7,16-23 > /dev/cpuset/theGood/${_prefix}cpus + +echo "Giving the Good memory node 0" +/bin/echo 0 > /dev/cpuset/theGood/${_prefix}mems + +echo "Making the Good cpu exlusive" +/bin/echo 1 > /dev/cpuset/theGood/${_prefix}cpu_exclusive + +read -p "Redirect Lutris to theGood ? y/n: " +if [ "$REPLY" = "y" ];then + echo "Redirecting Lutris to theGood" + for i in `pgrep lutris`; do echo $i > /dev/cpuset/theGood/tasks; done +fi + + +read -p "Redirect Steam to theGood ? y/n: " +if [ "$REPLY" = "y" ];then + echo "Redirecting Lutris to theGood" + for i in `pgrep steam`; do echo $i > /dev/cpuset/theGood/tasks; done +fi diff --git a/bin/.local/bin/winecleaner b/bin/.local/bin/winecleaner index e69de29b..3a28176c 100755 --- a/bin/.local/bin/winecleaner +++ b/bin/.local/bin/winecleaner @@ -0,0 +1,31 @@ +#!/bin/bash + +function yes_or_no { + while true; do + read -rp "$* [y/n]: " yn + case $yn in + [Yy]*) return 0 ;; + [Nn]*) echo "Aborted" ; return 1 ;; + esac + done +} + +PSOUTPUT="$(pgrep -l exe)" + +echo "Grepping ps for wine executables..." +if [ -n "$PSOUTPUT" ]; then + echo "The following processes have been found:" + echo "$PSOUTPUT" + yes_or_no "Would you like to send sigkill to all processes?" && pgrep exe | xargs kill + echo "Verifying that all processes have been cleaned..." + sleep 7 + PSOUTPUT="$(pgrep -l exe)" + if [ -n "$PSOUTPUT" ]; then + echo "Still some processes around. Please remove them manually..." + echo "$PSOUTPUT" + else + echo "All processes have been cleaned!" + fi +else + echo "No wine executables found" +fi -- 2.51.2