r_bash – Telegram
How to verify if a redis dump was successfully restored?

I have a bash noscript that
- downloads a redis dump from S3
- stops any running docker containers with the name "myrediscontainer"
- starts a new docker container "myrediscontainer" and copies the downloaded dump file into the data directory of this container
- waits for this docker container to be ready

When I manually jump into the container and run redis-cli, I can see all the keys
But how do I verify if the restore was successful or not inside the bash noscript. Would it be safe to say that dbsize > 0 means restore was successful? Is there a more appropriate way?

#!/usr/bin/env bash

# https://www.shellcheck.net/ VERIFIED
set -e
set -E
set -o pipefail
set -u
# set -x

log="/tmp/error.txt"
exec 2>>"$log"

handleerror() {
# ...handle error
exit 1
}

handle
exit() {
# ...handle exit
exit 0
}

trap 'handleexit $?' EXIT
trap 'handle
error $?' ERR

bucket='something-something'
containername="myrediscontainer"
dump
filedirectory="/tmp"
host="localhost"
port="6379"

dump
filename=$(aws s3 ls $bucket --recursive | sort | tail -n 1 | awk '{print $4}')

aws s3 cp "s3://${bucket}/${dump
filename}" "/tmp/${dumpfilename}"

docker ps -aq --filter "name=${container
name}" | grep -q . && docker stop "${containername}" && docker rm -fv "${containername}"

docker run --detach --name "${containername}" --publish "${port}:${port}" --volume "/tmp/${dumpfilename}:/data/dump.rdb" redis

# Wait for the Docker container to be ready
until docker exec -it "${container
name}" redis-cli -h "${host}" -p "${port}" ping; do
sleep 1
done

# HOW TO VERIFY IF REDIS WAS RESTORED SUCCESSFULLY HERE???

https://redd.it/15rmhbi
@r_bash
how to do rg-fzf-vi function/pipeline?

Hiiiii!!! I need to do something like rg rabbi | fzf | rg ".*.mkd" | xargs vi real easily but this is not at all easy for me.

I don't know bash (string parsing/expansion/etc, and other aspects of the language) too well. I struggle back and forth between grep/ack/rg without knowing either well, moving towards rg. And I don't know fzf well, but it's flags look --magical (and <oof> I fall down).

struggle #1: in lieu of a file object how to parse the filename from a string like

2022-01-02.mkd:looking for a loved rabbi... Hillel the Elder, alive around...

Uh... cut? tr? grep? bash string expansion or globbing or something?

struggle #2: what's the best way? fzf looks like it's designed to be used in pipelines perhaps more efficiently than what I've shown here... how do you do that?

ow. this hurts (sorry for whining, i feel very whiny). Any of you kindhearted folks able to help please? thankyou <3

https://redd.it/15rxc6l
@r_bash
Portable, ready-to-run shell noscript

I wrote a shell noscript that is intended to be used by laymen/non-programmers, and I simply want them to download my noscript from github and double-click the file and have it run. The problem when you unzip the respository and click the file, it fails because it does not have correct permissions to run. I have to chmod +x the file first. Is there a way to preset permissions so that users can just double click and run after download? I can't expect these users to open the terminal and properly enter chmod commands. This is for OSX btw.

https://redd.it/15s5531
@r_bash
Print lines between similar patterns

We have some python noscripts that queries our AWS accounts and produces a list of the accounts and some resources associated, including available AMIs. Using sed, I am trying to filter through the output to fetch only the accounts which have the AMI and the associated AMI.

Eg, the python output would be something like this:

Processing account: A
Text to ignore
More text to ignore
.
.
AMI used:
'ami-123456', 'ami-789012'
More text to ignore

Processing account: B
Text to ignore
More text to ignore
.
.

Processing account: C
Text to ignore
More text to ignore
.
.
AMI used:
'ami-abcdef', 'ami-123456'
More text to ignore


What I'm trying to get:

Processing account: A
AMI used:
'ami-123456', 'ami-789012'

Processing account: C
AMI used:
'ami-abcdef', 'ami-123456'

I was thinking of something like this, but it gives me 'Processing account: B', which doesn't have any AMIs listed.

$ sed -n '/Processing/, /Processing/p' filename.txt | grep -vE '(Text to ignore|More text to ignore)'

Output:

Processing account: A
AMI used:
'ami-123456', 'ami-789012'

Processing account: B
Processing account: C
AMI used:
'ami-abcdef', 'ami-123456'

Surely there is a better way to do this; keen to any suggestions.

Thank you.

https://redd.it/15siimc
@r_bash
IF inside awk

need to convert a comma separated integer into an integer and IF compare it to 1000 all inside an awk

if($1 > 1000){

printf("%s", $1);

}

where $1 is the first field of each record and looks like " 1,500"

https://redd.it/15sizhh
@r_bash
Counting seconds

I'm working on a function that counts seconds. The function stops as soon as any key is pressed. While this function works, I wonder whether there is a more efficient way to do this.

start=$SECONDS
while true; do
duration=$(( SECONDS - start ))
printf '%s' "$duration"
read -n 1 -t 1 -s && break
printf '\r'
done
printf '\r'


https://redd.it/15sig89
@r_bash
printf behaviour inside awk

printf("$1"); will echo "$1"

printf("%s",$1); will echo the variable inside $1

how do i get the first one to work?

https://redd.it/15si7de
@r_bash
Why is my Guess game doing this? I can't see what the problem is. Maybe one of you can?
https://redd.it/15sol82
@r_bash
tmuxo - A bash noscript to create + attach or create + switch(if exists) tmux sessions


#!/usr/bin/env bash

# Script to create + attach or switch to an existing tmux session

# Inspired from the followings:
# 1) https://github.com/thuanowa/tmux-fzf-session-switch
# 2) https://github.com/ThePrimeagen/.dotfiles/blob/master/bin/.local/noscripts/tmux-sessionizer

function tmuxOpen {
if [[ -z $TMUX ]] ; then
tmux attach -t "$1"
else
tmux switch-client -t "$1"
fi
exit 0
}

function main {

local sessions
local sess_arr
local retval

local session
local query

sessions=$(tmux list-sessions -F "#{session_name}" | fzf --exit-0 --print-query --reverse)
retval=$?

# echo "$sessions"
# echo "$retval"

IFS=$'\n' read -rd '' -a sess_arr <<<"$sessions"

session=${sess_arr[1]}
query=${sess_arr[0]}

# echo "$session"
# echo "$query"

if [[ $retval == 0 ]]; then
if [[ "$session" == "" ]]; then
session="$query"
fi
printf "Switching to existing tmux session named [$session]\n"
else
if [[ -z "$query" ]]; then
printf "Invalid session name \"$query\"\nExiting.\n"
exit 1
fi
session="$query"
printf "Creating new tmux session named [$session] and attaching\n"
tmux new-session -d -s "$session"
fi
tmuxOpen "$session"
}
main



https://redd.it/15sxh1r
@r_bash
Help with AWK noscript

I have the following awk noscript and the text file that I am parsing in this pastebin https://pastebin.com/sFps8wSF. I need this noscript to find out per sequence how many CPUs run under 80% idle and for how long. And then whatever the lowest %idle is, how many CPU's reach within 10% of the lowest and possibly for how long. In the text file example I gave in the pastebin , there are 2 sequences. The output I am expecting is

> Time Block Start: 10:08:29 AM
> CPUs running under 80% idle: 2
> CPU 1 Total time below 80%: 25 seconds
> CPU 4 Total time below 80%: 25 seconds
> CPUs reaching within 10% of lowest %idle: 2
> Time Block End: 10:08:29 AM
>
>
> Time Block Start: 10:13:29 AM
> CPUs running under 80% idle: 1
> CPU 4 Total time below 80%: 25 seconds
> CPUs reaching within 10% of lowest %idle: 2
> Time Block End: 10:13:29 AM

But what I am getting is

> Time Block Start: 10:08:29 AM
> CPUs running under 80% idle: 0
> CPUs reaching within 10% of lowest %idle: 0
> Time Block End: 10:08:29 AM
>
>
> Time Block Start: 10:13:29 AM
> CPUs running under 80% idle: 0
> CPUs reaching within 10% of lowest %idle: 0
> Time Block End: 10:13:29 AM

If anyone knows why my noscript is doing this , I would really appreciate the help!

https://redd.it/15sydwp
@r_bash
Need help finding subfolders' sizes and file counts

I need to generate a list of the content of a folder that looks something like this.

main folder/subfolderA/folder A
main folder/subfolderA/folder B
main folder/subfolderA/folder C
main folder/subfolderA/d.zip
main folder/subfolderA/e.exe
main folder/subfolderA/f.jpg
main folder/subfolderB/folder G
main folder/subfolderB/folder H
main folder/subfolderB/folder I
main folder/subfolderB/j.zip
main folder/subfolderB/k.exe
main folder/subfolderA/l.jpg
...

I would like the output to be like this (the format of folder sizes and file counts isn't set in stone, but after the paths).

main folder/subfolderA/folder A 500 MB 50 files
main folder/subfolderA/folder B 500 MB 50 files
main folder/subfolderA/folder C 500 MB 50 files
main folder/subfolderA/d.zip
main folder/subfolderB/folder E 500 MB 50 files
main folder/subfolderB/folder F 500 MB 50 files
main folder/subfolderB/folder G 500 MB 50 files
main folder/subfolderB/j.zip
...

I've been able to find the ZIP files with
 /path -iname \*.zip
, and
 /path -type d -print
gets the folders, but I'm having trouble finding a solution for listing the folders' sizes and number of files.
Can I adapt the second command to include that?

These two commands + sort generate this:

main folder/
main folder/subfolderA
main folder/subfolderA/folder A
main folder/subfolderA/folder B
main folder/subfolderA/folder C
main folder/subfolderA/d.zip
main folder/subfolderB
main folder/subfolderB/folder G
main folder/subfolderB/folder H
main folder/subfolderB/folder I
main folder/subfolderB/j.zip
...

I've also tried
 -h --max-depth=2 /path
, which gets folder sizes, but places them in the front of the path, making it harder to read and sort. Not sure what this output is considered (columns?), I tried swapping like this, but that only changed the values of the folder sizes.

Any advice is appreciated!

EDIT: I misread the link. I'm able to swap the paths and sizes using this, but it seems incompatible with paths with spaces.

https://redd.it/15swwu0
@r_bash
How do I alias cd to print "c deez nuts nerd" and then execute the directory change?

Trying to play a prank on my friend who leaves his laptop open all the time.

https://redd.it/15t0uv9
@r_bash
Music sorting program

I challenged my friend to send me an entirely unorganized folder of song files. I am trying to organize this using bash, but the moon runes that is terminal speak are eluding me. Can I get some advice on how I would organize the song files into folders based on their album tag?

https://redd.it/15szpsp
@r_bash
Is there any point in migrating from ZSH to Bash?

Hi everyone, I've been using zsh for about 2+ years now & haven't had any complaints.

I recently thought of switching to Bash because of a new video "The Linux Cast" posted, but I'm not sure if it's actually worth it or just made for clickbait or something to talk about.

I'm a full-stack web developer for my job, but I've never really had to write any noscripts. I've VERY rarely had to SSH into a server, but when I have I'm pretty comfortable with the commands since I use zsh.

Is there any point in switching to Bash? I don't really use the terminal for much rather than basic stuff. I'm assuming if I ever have to write a Bash noscript, I would do it in an IDE and use a Bash shebang anyway, so not sure if there are any benefits to switching.

Thanks in advance!

https://redd.it/15t7wkg
@r_bash
Is there zsh/fish-like autosuggestions, completions, and syntax highlighting in Bash?

Hi everyone,

I've been using ZSH for about 2 years now, but I'm thinking of migrating to Bash. Does Bash have Fish-like features such as autosuggestions, auto-completion, or syntax highlighting?

In zsh, whenever I'm looking through a directory & press `Tab`, I'm able to move through the suggested directories as well. Not sure if this is available on Bash.

Thanks in advance.

https://redd.it/15t7q2h
@r_bash
Operation not permitted inside ec2 but works fine on local mac

&#x200B;

https://preview.redd.it/tu8hrt8hpoib1.png?width=1512&format=png&auto=webp&s=cc6088e0a1de42aefcfc5b804c5e15b8ef0c8005

I have a bash noscript that basically downloads a few files inside /tmp
Inside the exit trap hander. all I am trying to do is cleanup
The rm -rf lines give me an operation not permitted error when run inside EC2 but work fine on the mac
If I add sudo rm -rf instead, it works fine on the EC2 instance but asks for a password on my mac
How do I resolve this?
Does it have some problems with /tmp? I can see that it belongs to root user and I am running commands as ec2-user inside my ec2 instance

https://redd.it/15tpy3l
@r_bash
find command to look for multiple files

Using bash 3.2 on a Macbook. I want to search the entire drive for files with specific names.

Thought the find command would be something like this:

find . -type f \\ (-name "test-1.2.14.rtf" -o -name "test-1.2.17.rtf" \\)

But that returns an error: unknown primary or operator.

Not sure what my mistake is.

&#x200B;

https://redd.it/15txz07
@r_bash
awk conditional weirdness

awk{

x=$1

printf("%s", x);

if(x > 100){

printf("=%s", x)

}}

but the output is

5=5

https://redd.it/15u2its
@r_bash
home directory is spammed with temporary bash history files.

only has been a problem on fedora never happened on ubuntu(i still love fedora though). how do i fix it?

https://redd.it/15u5nk7
@r_bash