r_bash – Telegram
Bash Customization

Hey guys! Just started using bash. How have you guys customized your terminal and how have you gone about doing so? I added export PS1="$ " to my .bash_profile but that made me lose all colors that were previously in the text. Any help is appreciated! Just want to make it easier for me to read the terminal.

https://redd.it/16i5np9
@r_bash
Shell noscript to enable or disable AVB/EAV mode possible?

Is it possible to enable or disable AVB/EAV mode by terminal?

https://preview.redd.it/wsso8y35x4ob1.png?width=684&format=png&auto=webp&s=c17e5a290a1494b92b0f764629ae5f16e55e09cc

https://redd.it/16i6qe3
@r_bash
How to conditionally remove names across parallel lines or immediately after each other?

How could every repeated actor but only if it repeats right into the next line - or multiple parallel lines (like DEVON and RICKEN here) there name gets deleted and replaced with spaces also empty line gets removed.

input:

RICKEN: This is so fun. Shall I, you know, tiptoe up and sneak to the door?

DEVON: He’s at work, baby. It doesn’t matter.

RICKEN: How do you know?

DEVON: Because his car’s not here.

RICKEN: Maybe he played hooky.

DEVON: Can you go do it?

DEVON: Cause I gotta pee.

DEVON: Realy fast.

RICKEN: Yes.

RICKEN: Against the door, or to the side?

DEVON: I think either’s really good.

RICKEN: Do you think he’ll be surprised?

DEVON: I do.

RICKEN: My babe, I’m gonna put it off to the side.

DEVON: Awesome.


output:

RICKEN: This is so fun. Shall I, you know, tiptoe up and sneak to the door?

DEVON: He’s at work, baby. It doesn’t matter.

RICKEN: How do you know?

DEVON: Because his car’s not here.

RICKEN: Maybe he played hooky.

DEVON: Can you go do it?
Cause I gotta pee.
Realy fast.

RICKEN: Yes.
Against the door, or to the side?

DEVON: I think either’s really good.

RICKEN: Do you think he’ll be surprised?

DEVON: I do.

RICKEN: My babe, I’m gonna put it off to the side.

DEVON: Awesome.

https://redd.it/16im5us
@r_bash
Accidentally broke something in a loop, noscript now complex enough to give me a headache

Not posting noscript directly here due to hugeness.

Pastebin: https://pastebin.com/WUUczzuD

Basically, I have this function "playlistscreenprinter".

It's intended job is to read a bunch of arrays, then print out the last n items in each array as columns in a numbered table. (n would be the number of rows in the terminal who aren't used for anything yet. It checks term size)

If the number of items in the array is less than n, then it should print what there is, and then some "echo -e" to pad out the end.

I had everything working until I started adding the conditional checks for if there is less in the array than n. Now it is broken, it prints out blank values instead.

Worse, this function has gotten complex enough that I actually can't hold all of it's workings inside my own head. I have literally no idea how these checks work, even though I have just written them. I get a headache and can't concentrate. (this might also have a medical component, but mostly interested in keeping to the noscript)

Could someone please check this code and tell me what it's actually doing? I feel like I've got a head wound.

https://redd.it/16ilw3b
@r_bash
A great ps4-5 and xbox dayz server

_Discovery Survival_

Wanna be apart of something great ? Introducing Discovery Survival ! With multiple PlayStation servers and Xbox as well ! Anything from pvp or just looting around we have it all !

* shop
* prio support
* custom bases
* custom killfeed
* in game credits that can be spent
* Build literally anywhere you WANT !
* Boosted loot
* Resets every 2 hours
* Many factions to join or create
* Servers NEVER wipe
* All servers weekend raids only

Come be apart of something awesome and bless us with being apart of it 😊

https://discord.gg/discoverysurvival

https://redd.it/16ir6sq
@r_bash
Bug in find command

Hi everyone,

I’m having an issue with my find command that I can’t seem to figure out.

Command:

find . -type d -iname “NamePattern*” -exec cp -rf {} /tmp \;


Sometimes the above command works properly by copying the resulting folder into /tmp (desired outcome)

Other times it copies all the files inside the resulting folder into /tmp. This is not expected.

I’m not sure why the behaviour keeps changing. It displays both behaviours even if the search pattern is the same. I run the command for the same folder and yet one time it copies the folder and the next time it copies all the files from inside the folder.

Can someone please help me understand what I am doing wrong here and how to fix this?

https://redd.it/16iy1o8
@r_bash
Found Useful Code to use, but don't Grasp Parts of It (newbie!)

I was looking to make a GUI pop-up to input the sudo password for a noscript I'm making. I'm a complete novice to bash noscripting and I came across another Reddit post that had some code that was able to do what I needed, but I'm not sure what some of it does:

fatal() {
echo "FATAL ERROR: $@"
exit 1
}
trap 'sudo -k' EXIT
zenity --password | sudo -Sv || fatal "Unable to sudo"

It's going at the beginning of my noscript, and I can understand what its supposed to be doing, but there's just a few parts I'm trying to understand about it, if that makes any sense...

In the fatal function, I'm not sure what the "$@" part of the echo command is or how it works, I tried googling it, but I couldn't really understand what I was reading or it gave examples of some other noscripts that I couldn't fully decipher.

I tried looking but apparently I don't have a manual on the trap command, and after some googling, I have a vague understanding of it.

Last part, I'm having a hard time grasping the explanations of the -Sv options of the sudo man page.

I was hoping someone might be able to explain one or all of those in as simplified a manner as possible so my tiny brain can grasp their concepts

https://redd.it/16j2ze4
@r_bash
How do I correctly copy and paste into the terminal?

If I wanted to paste this into the terminal as is

file=randomfile
while IFS= read -r line
do
echo $line
done < "$file"

It comes out looking weird and it doesn't run. There are new lines and it's not pasted correctly.

<~>$ file=randomfile
S= read -r line<~>$ while IFS= read -r line> do
echo $line
> done < "$file"

How do you usually copy and paste simple snippets of bash code found on stackoverflow onto the terminal without saving into a file through vim?

And sometimes if it does paste into the terminal without it looking all weird, it executes automatically, is there a reason for that?

https://redd.it/16j4ecc
@r_bash
Discovery survival

_Discovery Survival_

Wanna be apart of something great ? Introducing Discovery Survival ! With multiple PlayStation servers and Xbox as well ! Anything from pvp or just looting around we have it all !

* shop
* prio support
* custom bases
* custom killfeed
* in game credits that can be spent
* Build literally anywhere you WANT !
* Boosted loot
* Resets every 2 hours
* Many factions to join or create
* Servers NEVER wipe
* All servers weekend raids only

Come be apart of something awesome and bless us with being apart of it 😊

https://discord.gg/discoverysurvival

https://redd.it/16jdey9
@r_bash
what does bash being a "command language" mean?

i'm reading wikipedia

https://en.wikipedia.org/wiki/Bash\_(Unix\_shell))

and it says "Bash is a Unix shell and command language"

what does that mean? what does bash being a "command language" mean? what is a command language?

https://redd.it/16jl9s1
@r_bash
Oneliner to read entire Shrek noscript

sudo apt-get install -y gnustep-gui-runtime && say "$(curl http://www.noscript-o-rama.com/movie_noscripts/s/shrek-noscript-trannoscript-mike-myers.html | mawk '/<pre>/{flag=1; next} /<\/pre>/{flag=0} flag')"

https://redd.it/16jw8wz
@r_bash
How to setup commitlint, auto format all bash files and auto shellcheck all bash files for a BASH only project in VSCode?

&#x200B;

https://preview.redd.it/ka0g8jqhljob1.png?width=628&format=png&auto=webp&s=1d45e3aaea29a71404c3237f2a1e0e273a386f0c

I have a project on VSCode with nothing but a bunch of bash noscripts
I would like to be able to verify the commit messages to match conventional commit format everytime I want to commit something to git
I would also like to auto format all files on commit and auto shellcheck all files on commit or should I say that commit should fail if shellcheck has problems
How do I set something like this up on VSCode?

https://redd.it/16jxw0l
@r_bash
rparse: an easy-to-use shell noscript/function option parser that uses regex to determine which inputs are options

rparse makes it very easy to define options (inputs that start with a dash (-)) using extended regex matching. Using regex makes it possible to define many options in a single short string, and allow for a degree of "fuzzy" option matching, should you desire it. These regex option definitions and what is triggered by said options is added into an "option definition table" and passed to rparse (via stdin) along with the commandline you want parsed (via function input). rparse will take this info and return a list of commands to run based on the options that were present.

Lines in the option definition table use 1 of 2 possible syntaxes, depending on if that option has an argument associated with it.

Options without arguments use the format:

<REGEX> -> <CMDS>

For every input option that matches the <REGEX> definition, the command(s) listed in <CMDS> will run.

Options with arguments use the format:

<REGEX> => <VAR>

For every input option that matches the <REGEX> definition, the variable <VAR> will be set as the argument given along with the option.

Example

Aa? -> ((applecount++))
b(anannas?)? => banannaVar

This will:

make any of `-a` `-A` `--apple` `--Apple` `--apples` `--Apples` increment the variable `applecount` by 1

make any of -b <...> --bananna <...> --banannas <...> -b=<...> --bananna=<...> --banannas=<...> result in settting banannaVar=<...>

Ok, here is the code, along with a functioning simple example of using rparse. Let me know what you think!



rparse() {
## Extended-Regex sed-based options parser for bash shell functions and noscripts
#
# Define options in table. Lines of the table can have one of 2 formats:
# <REGEX> -> <CMD> ( for options without arguments. <CMD> will be run when option is read. )
# <REGEX> => <VAR> ( for options with arguments. Variable <VAR> will be set to the argument. )
#
# NOTE: Do not include the leading dash ('-') in table. Options can have any number (1+) of leading dashes.
#
# Pass the option definition table on stdin. Pass the cmdline you want to parse as function input.
# rparse will output the commands that you want to run. source the output to actually run them.

local -a sedfilt0 ii
local -i nkk kk

nkk=0
ii=("${@}")

# transform options table into a sed filter for cmdline to parse
{
mapfile -t sedfilt0 < <(cat <&${fd0} | grep -E '.+' | sed -E 's/^(.) -> (.)$/s\/^-+\1( ^-.)? $\/\2\/; /; s/^(.) => (.) $/s\/^-+\1[= ]\/\2=\/;/')
} {fd0}<&0

# break up options into 1 per line and then run it through the sed filter we just made
# for options with arguments, keep the argument on the same line as its corresponding option
{
for kk in ${!ii[@]}; do
case "${ii[$kk]}" in
'--')
break;
;;
'-'
=)
printf '\n%s ' "${ii[$kk]%%=
} ${ii$kk#=}"
nkk=2
;;
-
)
printf '\n%s ' "${ii$kk}"
nkk=1
;;
)
{ (( $nkk == 0 )) || (( $nkk >= 2 )); } && break
printf '%s ' "${ii[$kk]}"
((nkk++))
;;
esac
done
printf '\n'
} | sed -E "${sedfilt0[
]}"
}


# define testing function
gg() {
local sedfilt flagA valB
flagA=false

# define options table
# if option '-a' or '--apple' is given, the command flagA=true is run
# if '-b <...>' or '--bananna <...>' or '--bananna=<...>' is given, set variable "valB" to <...> (i.e., run
valB=<...>)
sedfilt="$(cat<<'EOF'
a(pple)? -> flagA=true
b(anannas?)? => valB
EOF
)"

# pass rparse the option table on its stdin and the commandline as function inputs, then source its output
source <({ rparse "$@"; }<<<"${sedfilt}")

# check things were set correctly
echo "flagA = ${flagA}"
echo "valB = ${valB}"

# do stuff probably
}

# try it out
gg
gg -a
gg -apple
gg -b 0
gg --bananna=1
gg -a --bananna=2
gg -b 3 --apple --bananna 4
gg -a --bananna 4 -b 3 --apple -bananna=2 -a -b=1 func arg nonoption

https://redd.it/16lpgps
@r_bash
Use curl to download from password protected host

I'm writing a bash noscript which takes in a url as argument and prompts username and password inputs in order to download the file from the url. The problem is curl wants to know the target file name (which is at the end of the url) in order to download. I imagine a solution involving regex to match the end of the url to a pattern. Is there a better way to implement this ?

https://redd.it/16m4nsk
@r_bash
Changing audio output with noscripts

Hello,

I want to make a noscript that changes my audio outputs if I run it

&#x200B;

The problem is that my setup is a bit weird

I have 2 cards

&#x200B;

alsa_card.usb-Corsair_CORSAIR_VIRTUOSO_Wireless_Gaming_Headset_16adc305000000da-00

&#x200B;

&#x200B;

alsa_card.pci-0000_01_00.1

&#x200B;

&#x200B;

And with this there would be no problems, but I have problems with the fact that under the pci card I have two profiles, output:hdmi-stereo-extra1 and output:hdmi-stereo-extra2 one is my TV the other is my monitorAnd also I would need to disable all other cards/profiles so new and existing audio is forced on the newly set output

&#x200B;

I tried searching google for solutions but most either causes my audio to not even work, or because of the profile settings does not want to go from Headphones into TV and things like this

&#x200B;

Any help would be nice


EDIT: I would need to do this in 3 separate noscripts, since I have 3 outputs I want to use

https://redd.it/16mw7sl
@r_bash
getopts "require" flag (or running noscript with no flags just shows usage)

Hey all,

I've got a generic noscript that I'd like to *require* a/any flag in order for it do anything, and if no flag is included (i.e. just running ./foo.sh) outputs the usage function.

&#x200B;

So:

running ./foo.sh outputs via 'echo' ./foo.sh [ -s \] to do bar, ./foo.sh [ -d \] to do foobar

running ./foo.sh -s does foo

running ./foo.sh -d does foobar

&#x200B;

Note: none of the flags require any arguments. The flags alone is all that's needed

&#x200B;

Full getopts part of function will be in a comment so as to not fill the OP

https://redd.it/16n07lb
@r_bash
Question about read command

I need my read loop to break when it hits an empty line. I was suggested to use this command, but I am confused why the "-z $line" conditional is true when there is an empty line?

while IFS= read -r line; do
if [ -z $line ]; then
break

&#x200B;

https://redd.it/16nbzro
@r_bash
Here is VEDV written in pure BASH, A tool for developing applications with virtual machines using a Docker-like workflow.

The software we are developing needs to be tested on a system as closed as possible to the one where it is going to be executed. Sometimes it is very difficult to satisfy this requirement with docker and we have to use virtual machines missing the docker workflow. This is why I started the development of vedv. I hope you find it useful. Thank you.

https://github.com/yunielrc/vedv

&#x200B;

https://redd.it/16mvdnf
@r_bash