r_bash – Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
[Help] tput setab colors stretch to terminal width on term scroll. (noscript in comments)
https://redd.it/175m914
@r_bash
Building options from array. What am I doing wrong?

I am trying to find a range of files, but I want to be able to keep the extensions in an array. I try to echo the final find command and it echos correctly, but if I try run it, I just get a null result. Copy and pasting the echoed command returns a result.


#!/bin/bash

extarray=( "3gp" "mp4" "mkv" "m4a" "webm" "mpg" "mpeg" "avi" "vob" "asf" "wmf" )

for ((n=0; n<${#extarray@}; n++))
do
if [ $n == "0" ]
then
optiname="-iname \".${extarray[$n]}\""
else
temp=$optiname
optiname="$temp -o -iname \"
.${extarray$n}\""
fi
done

echo "find . -type f \( $optiname \) | sort"

find . -type f \( "$optiname" \)

&#x200B;

https://redd.it/1760ifx
@r_bash
Struggles of a noscripting noob

I decided to use a Windows subsystem for Linux, install Debian and play around with bash noscripting.

I have to say it has been somewhat frustrating. As a first attempt at something somewhat useful I decided to make a command function to start a new noscript.

I learned that functions don't even need a type declaration. you don't need to put the word function in the code for it to become a function.

I learned there is no one proper syntax for an if structure. There are multiple acceptable sysntaxes, but sometimes a space or lack of a space in the wrong place is fatal, while whether you use parens or square brackets might not matter.

Here is what I ended up sticking in the end of my .bashrc file:

function mbs { # command to make a new noscript

FILE=$1

echo $FILE

if [ $# -gt 0 \]

then

echo "%! /bin/bash" > $FILE

chmod u+x $FILE

echo "# $FILE" >> $FILE

nano $FILE

&#x200B;

else echo "You need to supply a filename."

&#x200B;

fi

}

The first improvement IMO would be to make sure it does not overwrite an existing file, but at least this is doing what I asked it to.

The reason for this post is just to express some surprise that the syntax of this language is important in some ways and not important in others. :D

https://redd.it/1769ezz
@r_bash
Looking for a Linux & Unix Discord Community?

Are you passionate about Linux and Unix? 🐧

Do you want to connect with like-minded individuals, from beginners to experts? 🧠

Then you've found your new home. We're all about fostering meaningful connections and knowledge sharing.

🤔 Why We Exist: At the heart of our community is a shared love for Linux and Unix. We're here to connect with fellow enthusiasts, regardless of where you are on your journey, and create a space where our shared passion thrives.

🤨 How We Do It: We foster a welcoming environment where open conversations are the norm. Here, you can share your experiences, ask questions, and deepen your knowledge alongside others who are equally passionate.

🎯 What We Offer:

🔹 Engaging Discussions: Our discussions revolve around Linux and Unix, creating a hub of knowledge-sharing and collaboration. Share your experiences, ask questions, and learn from each other.

🔹 Supportive Environment: Whether you're a newcomer or a seasoned pro, you'll find your place here. We're all about helping each other grow. Our goal is to create a friendly and supportive space where everyone, regardless of their level of expertise, feels at home.

🔹 Innovative Tools: Explore our bots, including "dlinux," which lets you create containers and run commands without leaving Discord—a game-changer for Linux enthusiasts.

🔹 Distro-Specific Support: Our community is equipped with dedicated support channels for popular Linux distributions, including but not limited to:

Arch Linux

CentOS

Debian

Fedora

Red Hat

Ubuntu

...and many more!

Why Choose Us? 🌐

Our server aligns perfectly with Discord's guidelines and Terms of Service, ensuring a safe and enjoyable experience for all members. 🧐 📜 ✔️

Don't take our word for it—come check it out yourself! 👀

Join our growing community of Linux and Unix enthusiasts today let's explore, learn, and share our love for Linux and Unix together. 🐧❤️

See you on the server! 🚀

https://discord.gg/unixverse

https://redd.it/176aqrh
@r_bash
Help with creating a bash code to compare two different files

Hello, everyone!

I'm currently encountering some challenges while working on a bash noscript in the Linux terminal to perform the following tasks:

1. Compare the values in the third column of two different files line by line.

2. If the values are different, save in a third output file the identifier from the second column of the input files, along with the corresponding values from both File 1 and File 2, similar to the "desired first output" example provided.

3. Additionally, create a fourth output file to tally the occurrences of each unique qualitative difference, taking into account the order (for example: 9690 0 ≠ 0 9690) while disregarding the identifier. This is illustrated in the "desired last output" example.

Any assistance or guidance in achieving this is greatly appreciated!

FILE 1

U E100033877L1C016R01601996031 0 140 0:106

U E100033877L1C023R03303214633 0 140 0:106

C E100033877L1C022R01901579971 27996 140 27996:1 0:7 27996:23 0:75

C E100033877L1C023R02603225407 27996 140 0:32 27996:23 0:7 27996:1 0:3 27996:4 0:36

C E100033877L1C020R02602000209 0 140 0:106

C E100033877L1C023R03303214633 27996 140 27996:3 0:4 27996:5 0:94

C E100033877L1C023R03101740491 9690 140 9690:13 0:8 9690:7 0:13 9690:9 0:56

C E100033877L1C006R00200498634 9690 140 9690:71 0:35

C E100033877L1C009R03603066069 27996 140 0:50 27996:2 0:1 27996:10 0:6 27996:11 0:26

C E100033877L1C005R03300436825 27996 140 27996:3 0:6 27996:3 0:3 27996:5 0:86

FILE2

U E100033877L1C016R01601996031 0 140 0:106

U E100033877L1C023R03303214633 0 140 0:106

C E100033877L1C022R01901579971 27996 140 27996:1 0:7 27996:23 0:75

C E100033877L1C023R02603225407 27996 140 0:32 27996:23 0:7 27996:1 0:3 27996:4 0:36

C E100033877L1C020R02602000209 27996 140 0:19 27996:4 0:3 27996:1 0:7 27996:23 0:49

C E100033877L1C023R03303214633 27996 140 27996:3 0:4 27996:5 0:94

U E100033877L1C023R03101740491 0 140 0:106

U E100033877L1C006R00200498634 0 140 4840:106

C E100033877L1C009R03603066069 4840 140 0:50 27996:2 0:1 27996:10 0:6 27996:11 0:26

C E100033877L1C005R03300436825 27996 140 27996:3 0:6 27996:3 0:3 27996:5 0:86

DESIRED FIRST OUTPUT

E100033877L1C020R02602000209 0 27996

E100033877L1C023R03101740491 9690 0

E100033877L1C006R00200498634 9690 0

E100033877L1C009R03603066069 27996 4840

DISIRED LAST OUTPUT

2 9690 0

1 0 27996

1 27996 4840

https://redd.it/176pcqr
@r_bash
Best way setting arguments to noscript that is not able to read from the environment

Hello. I am working with a noscript that is not able to read variables from the environment and that I am not able to modify.

printenv
# a=123 b=234 c=345

# Script expects the variable content in arguments
./noscript para=123 parb=234 parc=345

What is the best way to handle a situation like this?

https://redd.it/176utr4
@r_bash
Help... I got confused by the bash statement(while, if...)

Hello everyone, I have used bash since last year and was amazed by its powerful features, but I only treated it as a prompt that makes doing things faster then......

Until this month I started to learn bash noscripting and started to get confused by some of its logic... for example the noscript below, I still did not get it...

https://preview.redd.it/pv61mddgpytb1.png?width=947&format=png&auto=webp&s=6e807609771071c9d52af5178f0262d6a7a8d113

(1) If originally the battery was greater than 30, when battery was becoming lower than 30 , it did not quit the loop and did not showing the message either.

(2) If it was lower than 30 when I ran this program, it will show up the warning message and quit the loop.

&#x200B;

I've searched for some information on the internet saying that "if [ \]" and "if " different, but I'm still not clear about the concept...

I will be appreciate if someone can explain it to me...thanks

https://redd.it/176xs3b
@r_bash
How can I arrange this messy output in neater columns?
https://redd.it/17730bf
@r_bash
Job command help, not showing up
https://redd.it/1777589
@r_bash
Cant create a nested shells in bash beyond the Child shell using coproc command and process list

Suppose I run this command: coproc nested { sleep 10; } it executes sleep command within a childshell as expected. The process tree look like this when I run ps T --forest command.


PID TTY STAT TIME COMMAND
40305 pts/0 Ss 0:00 bash
46922 pts/0 S 0:00 _ bash
46923 pts/0 S 0:00 | _ sleep 10
46924 pts/0 R+ 0:00 _ ps T --forest



Ok no problem, its exactly what I expected. But then, when i run the command like this: coproc nested { (sleep 10); }, the process tree looks the same when I run ps T --forest command.

PID TTY STAT TIME COMMAND
40305 pts/0 Ss 0:00 bash
47064 pts/0 S 0:00 _ bash
47065 pts/0 S 0:00 | _ sleep 10
47066 pts/0 R+ 0:00 _ ps T --forest

Note that, here, (sleep 10) is a process list and it automatically should create a subshell to run the command sleep 10.

So, what I was expecting was a process tree like this:

bash
_ bash
| _bash
| _ sleep 10
_ps T --forest

https://redd.it/177sgyg
@r_bash
setting a variable inside of a variable for loop

I pretty much have

x=0
myvar=$(for f in blah blah blah
do
printf stuff
x=$((x+1))
done
)

x is still equal to 0 at the end

If this is impossible then I need another way to count interations of this for loop

https://redd.it/1784yqa
@r_bash
Input two characters and proceed

>VALUE=`zenity --entry --text="1-60"`

I have to enter two characters and then press enter. Is there an easy way to automatically complete the dialog after entering two characters?

https://redd.it/178ga2j
@r_bash
function using unupdated information

this noscript is very long so I'll show the main idea

I orginally have a "$file" in "$mydir"

Then my noscript does this

function1 () {
for f in "$mydir"/*
do
printf "$f"
done
}


function2 () {
mv "$file" /tmp
function1
}

But when function1 is called, "$f" is still being printed even though it is no longer there.

I am using set -x to debug. The noscript works as expected. The file is moved to /tmp and no longer in "$mydir". I am also monitoring the directory using "ls" in realtime and again, it works as expected. When function 2 is called myfile is already gone from the directory so it should not be appearing there. But it is.

https://redd.it/178klt5
@r_bash
Every 4 minutes, backup to git and if there are changes, increment commit version number and post to twitter.

crontab -e

> */4 * * * * /var/www/html/./updater.sh


updater.sh

#!/bin/bash

subsubversion=$(cat /var/www/html/.subsubversion);

cd /var/www/html;

git add *
git commit -m "v1.2.$subsubversion"

if ! [ "$(git push 2>&1)" = "Everything up-to-date" ]; then
((subsubversion++))
echo $subsubversion > /var/www/html/.subsubversion
./tweet.sh $subsubversion
fi

.subsubversion
> 0

tweet.sh

#!/bin/bash
source .twitterkeys
urlencode () {
[ -n "$1" ] \
&& echo -n "$1" | perl -p -e 's/([^A-Za-z0-9-._~])/sprintf("%%%02X", ord($1))/seg'
}

signature_method='HMAC-SHA1'
timestamp=$(date +%s)
nonce=$(md5sum <<< "$RANDOM-$(date +%s.%N)" | cut -d' ' -f 1)

url="https://api.twitter.com/2/tweets"
encodedURL=$(urlencode $url)
PARAM=$(urlencode "oauth_consumer_key=$consumer_key&oauth_nonce=$nonce&oauth_signature_method=$signature_method&oauth_timestamp=$timestamp&oauth_token=$token&oauth_version=1.0")
signature=$(echo -n 'POST&'$encodedURL'&'$PARAM|openssl dgst -sha1 -binary -hmac "$consumer_secret&$token_secret" |base64)
encoded_signature=$(urlencode $signature)

data="lockedon.life\nv.1.2."$1" is live!"
echo $data
curl -v -X POST \
$url \
-H "Authorization: OAuth oauth_consumer_key=\"$consumer_key\",oauth_token=\"$token\",oauth_signature_method=\"$signature_method\",oauth_timestamp=\"$timestamp\",oauth_nonce=\"$nonce\",oauth_version=\"1.0\",oauth_signature=\"$encoded_signature\"" \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{ "text" : "'"$data"'" } '

.twitterkeys

consumer_key="oSCP6sG3cxxxxxxxxxxxxxxxx"
consumer_secret="IPLhdABBjmJkoB0Swl9QxaJQ6fUQAqZqe2xxxxxxxxxxxxxxx"
token="1467985006530162690-qQG1dKMIZab504xxxxxxxxxxxxxxxx"
token_secret="40QZ6wql6TzCuXdMmvd9e1tubXjXsxxxxxxxxxxxxxxxx"

https://redd.it/178w823
@r_bash
Help needed with noscript

Hi all,

I have the following noscript that will not execute. Error is gphotos-sync: error: unrecognized arguments: Photos.

I think the space in the TARGET string is causing an issue but if I echo the last line I get /home/gregeeh/gphotos/venv/bin/python /home/gregeeh/gphotos/venv/bin/gphotos-sync "/home/gregeeh/media/Google Photos" --album Hintons --skip-video --omit-album-date --port 11354

which is correct.

What am I doing wrong?

TIA

&#x200B;

#!/bin/bash
# Purpose = Sync Google Photos

VENV="/home/gregeeh/gphotos/venv/bin"
TARGET='"/home/gregeeh/media/Google Photos"'
APP=$VENV/gphotos-sync
FLAGS="--album Hintons --skip-video --omit-album-date --port 11354"


$VENV/python $APP $TARGET $FLAGS

https://redd.it/178ylr5
@r_bash
CLI tool to check the World Cup 2023 matches schedule in your terminal.

Just created a node CLI for Cricket World Cup 2023!🏆 Now you can get match schedules right in your terminal. Just type 'npx wc23-cli' to explore!

Check out the CLI: https://github.com/MoazIrfan/wc-cli
Stay updated with match schedules. Happy cricketing!🎉 #Node #CLI

https://redd.it/1794stc
@r_bash
Fuzzy find Emojis with fzf

I wrote a small noscript to get the latest Emoji database and display them in fzf. With an extra function you can also print them in vim 🥳

Script: https://raw.githubusercontent.com/SimonWoodtli/dotfiles/main/noscripts/emoji

https://i.redd.it/8aobk2cmfkub1.gif

https://redd.it/1795zfc
@r_bash
An optimized way of checking / adding text to a file

I have a batch noscript. When I run that batch noscript, I want it to open a config file and check for two specific lines that are usually next to each other

myconf.cnf

phpengine
# For debugging only #
show-all-errors

What I'm trying to do is check if [phpengine] and #show-all-errors exist. (the show-all-errors has to be below [phpengine]

And when matching those two lines, a way to toggle show-all-errors to be either commented or uncommented.

So I pretty much need the bash noscript to just check the file and see if those two lines exist, and then have control over adding a # in front of #show-all-errors or removing the comment character.

I started trying to write code to add / remove the comment based on a matching line, but then I realized all the extra conditions

How to do it when there's a commented line in-between separating the two lines.
Adding the text to the file if the two lines don't exist.

So I'm not sure where the heck to go with this. And I could remove the commented line "#For debugging only #", but the noscript will auto-readd it on update, and I wanted a solution to just have it run and take care of it for me without manual edits to remove the line.

And the code I've got now really isn't crap, because all it does is detect if it's commented or uncommented

    if sudo grep -Eq '^ *show-all-errors' "/etc/php-engine/myconf.cnf"; then
# found match
fi


And I found some helpers for toggling comments on / off but this seems over-kill, and I doubt I'm even going in the right direction

    comment()
{
local regex="${1:?}"
local file="${2:?}"
local comment_mark="${3:-#}"
sed -ri "s:^([ ]*)($regex):\\1$comment_mark\\2:" "$file"
}

uncomment()
{
local regex="${1:?}"
local file="${2:?}"
local comment_mark="${3:-#}"
sed -ri "s:^([ ]*)[$comment_mark]+[ ]?([ ]*$regex):\\1\\2:" "$file"
}


https://redd.it/179pzc6
@r_bash
A student in need for help

I'm trying to create a little program as an exercise that let the user input as many characters as possible in x seconds to calculate and output charactes per minutes.

I'm having a little problem that chatgpt can't solve. The timer in backgroung won't stop whaterver i try.

Thanks in advance

#!/bin/bash

clear

t=1
countdown() {
local seconds=$1
while (( $seconds >= 0 ))
do
sleep 1
((seconds--))
done
t=0
}

duration=5
countdown $duration &

echo "Enter characters within $duration seconds"

count=0
while (( t != 0 ))
do

read -sn 1 input
clear
((conta++))
echo $count

done

echo "Time expired"
sleep 1
clear

kill $1

echo "You entered: $count characters in $duration seconds"


&#x200B;

https://redd.it/179v1rv
@r_bash