r_bash – Telegram
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
Need to extract variable from prompt


When I give command kinit then it prompts me to enter the password.
[root]:Inbound> kinit
Password for username@ip_address:

I want to extract the username from the prompt that has given.
I have used set -x to achive this but it seems very primitive way
This is the noscript I am using currently.

#!bin/bash
prompt="random_gibbrish"
set -x
kinit < $prompt > $PWD/output2.txt
set +x
user=$(cat $PWD/output2.txt | awk '{print $3}' | awk -F "@" '{print $1}')
echo USER:::$user

Terminal Output---
[root]:Inbound> sh kinit.sh
+ kinit
kinit.sh: line 4:random_gibbrish : No such file or directory
+ set +x
USER:::username

it is giving me the right result but is there another way to do this?
Noob here.. need to learn how to enclose code in proper lines while asking question.. sorry for that..

https://redd.it/15uf7f3
@r_bash
my PS1 ends with a tab character, using the "home" key to go to the beginning of the line messes up visually

so for example, if I have the following entered, where | means "the current cursor position":

echo hi|

and I press the following keys

<home>echo<space>

then I would expect the result to be

echo |echo hi

and this does work! but if I do it twice, something weird happens. if I press <end>

echo echo hi|

and then home again, the cursor goes inside the tab character

| echo echo hi

and now if I try typing "echo "

cho |eecho echo hi

if I try pressing enter, it is as if it was typed correctly, I do get echo echo hi. this seems to happen in both konsole and xterm so I think it is a bash bug not a terminal bug.

so to summarize, the necessary steps are: put a tab character at the end of PS1. type something. press home. type something. press end, then home again. type something.

is this news? does anyone know what I should do? my prompt actually ends with \!:<tab> so I can't just use space characters.

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