r_bash – Telegram
2>&1

You know what gets my head in?

In Linux/Bash when we want something to run in the background we would do something like this: ./yourCommand > /dev/null 2>&1 &

I am taking issue with 2>&1. "&1" refers to a variable as we can see by the "&", the standard bash variable "standard output" so far so good :> all makes sense.

But the "2" here refers to another variable "standard error" why then we don't write &2>&1?

Would ./yourCommand > /dev/null 2>1 & be valid syntax and work?

https://redd.it/126ogzm
@r_bash
A helper function to tell if a noscript is sourced?

I write a fair amount of noscripts and I often have strong opinions on whether those noscripts should be sourced or executed. It's usually because I don't want to screw over future me because I've written a noscript that is a little aggressive with the environment.

For those noscripts I have a block of code I run:

(return 0 2>/dev/null) && sourced=1 || sourced=0
if [[ $sourced -ne 0 ]]; then
echo "Don't source this noscript. Run it directly"
return 1
fi

I also hate copy and pasted code, but because this relies on the behavior return has depending on if a noscript is sourced or executed, I can't really put this is a helper function and call that helper function. Instead I do this (mildly crazy) thing where I have a bunch of noscripts stored in variables and then I just eval those in the noscript.


So I have a utiltiy noscript with something like:

# shellcheck disable=SC2034
BASH_COMMON_SCRIPT_UNSOURCEABLE=$(cat <<'EOM'
(return 0 2>/dev/null) && sourced=1 || sourced=0
if [[ $sourced -ne 0 ]]; then
echo "Don't source this noscript. Run it directly"
return 1
fi
EOM
)

And then I use this in a noscript kinda like:

CONFIGROOT_DIR_SCRIPT="$( cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )" >/dev/null 2>&1 && git rev-parse --show-toplevel 2>/dev/null )"
if [ -f "${CONFIGROOT_DIR_SCRIPT}/util/noscripts_as_variables.sh" ]; then
# shellcheck disable=SC1091
source "${CONFIGROOT_DIR_SCRIPT}/util/noscripts_as_variables.sh"
fi
eval "${BASH_COMMON_SCRIPT_UNSOURCEABLE}"

And yes I'm aware of the perils of eval'ing an env var.


Is it possible to do this in a more sensible way?

https://redd.it/126tv9y
@r_bash
CSV to variables

I'm trying to parse a csv to variables to use it in "update all wordpress/nextcloud/..." noscripts

The CSV looks like this:

nicename,application,directory
blog1,wordpress,/var/www/wordpress1
blog2,wordpress,/var/www/wordpress2
cloud,nextcloud,/var/www/nextcloud

How do i parse these into variables like $blog1.directory (using the nicename)?

https://redd.it/126rxvi
@r_bash
Need help creating a simple loading noscript

Hi everyone! I am currently creating a noscript that saves data to a file, and another one that loads that data. I have already create the saving part, but now I need to figure out the loading part. I need to load the even lines as "arg1(number of line)" and "arg2(number of line)". How can i do it?

https://redd.it/126xl55
@r_bash
Learning bash is so frustrating

Can you recommend to me any site more preferably a pdf tutorial for bash.
Thank you.

https://redd.it/1272uv3
@r_bash
Color schemes in Micro

Hello, I am just wondering how to change the color scheme of micro text editor in a bash noscript.

the command to change the color scheme is

^e set colorscheme "colorscheme"

https://redd.it/1279ifv
@r_bash
Made a noscript manager for non-savvy users

Hey there,

&#x200B;

I work with a lot of field techs, skill levels on computers vary. We have a bunch of various noscripts that we need the techs to run, but some have a hard time staying organized.


I made this so that there is a single folder, where all the noscripts reside. You only have to open this single "app" if you call it that. From there, they can run multiple noscripts with an interface.

&#x200B;

I couldn't really find anything like this, so I made it.

&#x200B;

Thoughts on improving? Also feel free to use it.

&#x200B;

https://github.com/kylezwhite/slector

https://redd.it/127f4tk
@r_bash
Question about calls with relative paths

The following is a call with an absolute path specification that works for me. This call, opens the file samplefile with the editor xed:

xed /a/b/c/d/e/f/g/samplefile.txt

Suppose I open a terminal and type the following:

cd /a/b/c/d

How would I then have to open the text file with the editor xed from this position with a relative specification. For example the following call I tried seems to be wrong here:

./e/f/g/samplefile.txt

https://redd.it/12809zu
@r_bash
Issue with sorting grep results in bash noscript

I do not know how to get my bash noscript to produce the right output, but it's very close. I need it to sort from highest frequency codon to lowest like this for an example correct output:

aac 20

aag 9

cgg 2

pastebin w/ code: https://pastebin.com/hH1p1Yxk

output: https://imgur.com/a/y78dy5l

https://redd.it/12854yn
@r_bash
I don't know who needs to see this but I wrote a noscript to optimize Arch for Persian/Farsi writing/reading. (Link below)

Here is the noscript
It's a dead-simple noscript that only installs some packages and generates proper locale and sets the time and date, but I guess it could still help new users.
Cheers.

https://redd.it/1287vum
@r_bash
N00b question

This is the noscript I'm using.

Now, I'm supposed to replace every instance of RAW_FILE with the actual path to my file. I'm having trouble with this. I've tried single quotes, double quotes, a space between the parentheses, and none of them work. Let's say the file in question is called file.xyz for example, how would I reference it? Note that the file is in the same directory as the noscript.

https://redd.it/128g3h7
@r_bash
using grep in noscript

I am trying to write a noscript that will list a directory's contents and use grep to filter for only certain match sub directories and files. While the grep command works in command line fine when I put it in a noscript it no longer gives a return just holds up the noscript causing me to have to Ctrl-C out of it. I'm now a brand new noscripting guy but definitely a novice. I am on a Linux Machine attempting this. Any assistance would be greatly appreciated.

https://redd.it/128otp8
@r_bash
Need assistance for bash noscript

I have a noscript i am writing which lists directories or files in a location and displays them as selections to choose from. Once Chosen I would like to copy the "file" or "directory" to a new locations keeping all the contents. The copy part is goofing me up I cant seem to figure out how as when I am listing the choices its saving the full directory path PLUS a ":" sign. All I need is the full path call out and then a way to copy to a new given location. This noscript is being written on a linux machine.

Following is what I have thus far.. its proving challenging but ive been working on this for 4 hours just to get this far... I know the final line does not work.

#!/bin/bash

echo "Please select the item from the list"

files=$(ls /home/mib2/WorkTest/20230331*)
i=1

for j in $files
do
echo "$i.$j"
file[i]=$j
i=$(( i + 1 ))
done

echo "Enter number to select"
read input
echo "You selected: ${file[$input]}"

cp -R "${file[$input]}" /home/mib2/WorkTest/WWW/NEW1/

https://redd.it/128tnm0
@r_bash
Writing a noscript that adds numbers to the end of a text file full of words

I am trying to write a noscript that adds numbers to the end of a list of words. Here's what I've tried:

#!/bin/bash
# add_numbers.sh

while read w; do
echo ${w}{0..9}
done

Then I run it with `$ ./add_numbers.sh < words.txt`

This runs, but it adds the numbers on the next line down, I think:

9 ZOOS
9 ZORN
9 ZOROASTER
9 ZOROASTRIAN

&#x200B;

So I tried to strip the carriage return (right?) at the end of the line when `read` gets the line:

#!/bin/bash
# add_numbers.sh

while read w; do
stripped=echo ${w} | tr -d "\r"
echo ${stripped}{0..9}
done

But the output just gives errors:

./add_numbers.sh: line 4: $'AGGLUTINATE\r': command not found
0 1 2 3 4 5 6 7 8 9
./add_numbers.sh: line 4: $'AGGLUTINATED\r': command not found

&#x200B;

What am I doing wrong?

&#x200B;

EDIT: For the heck of it I asked GPT3.5 to do this and here's what I got:


#!/bin/bash

while read line; do
for i in {0..9}; do
echo "$line$i"
done
done < "${1:-/dev/stdin}"

I left out the stdin redirect at the bottom, but what it outputs replaces the first character with a number in each word:

9ULU
0ULUS
1ULUS

Those lines would be ZULU and ZULUS.

https://redd.it/128y3cp
@r_bash
Noobie BASH help

Hi -

New to BASH noscripting and need some direction.
I have this noscript below, but it's not creating the file i'm after. I think its related to path name for the new file location.

The error i'm getting is:
Start time: Sun, 02 Apr 2023 15:05:17 GMT
Stop time: Sun, 02 Apr 2023 15:05:18 GMT
Current status: 0 (Normal)
Standard output/error:
/bin/bash: line 15: Scripts/test/20230402-150518.txt: No such file or directory
Text file created at: Scripts/test/20230402-150518.txt

But no file created. I think i have the path name wrong, but not sure how to format it?

I think this is wrong.... folder_path="/Scripts/test"
but i'm not sure "why" its wrong.

&#x200B;

Any help appreciated-


\~\~

\#!/bin/bash

\# Get the current date and time

datetime=$(date +"%Y%m%d-%H%M%S")

&#x200B;

\# Get the current day name and date

day_and_date=$(date +"%A, %B %d, %Y")

&#x200B;

\# Specify the folder where you want to create the text file

folder_path="/Scripts/test"

&#x200B;

\# Create the text file with the date time stamp as the file name

file_path="${folder_path}/${datetime}.txt"

&#x200B;

\# Write the day name and date to the text file

echo "$day_and_date" > "$file_path"

&#x200B;

\# Print the file path for reference

echo "Text file created at: $file_path"

\~\~

https://redd.it/129b1l5
@r_bash