r_bash – Telegram
Delete last 3 lines of file

I'm trying to find a quick/dirty way to just delete the last lines from a file without opening it. So for example, something similar to this:

$cat test
first line
second line
third line
forth line
fifth line
$ head -n -3 test > test2
$ cat test2
first line
second line

Like this works, but now I've got to delete test and mv test2 into test. This whole process is just far too cumbersome.

I tried using the below, but unfortunately it results in test being empty. It appears to be an order of operations issue where it is trying to overwrite a file it's trying to get data from, and ends up with test having a completely empty file.

$ head -n -3 test > test

What I need is some sort of buffer to hold the output of $ head -n -3 test, which can then be used as an input buffer for a file. Not really sure how to do that.

https://redd.it/z2nc8m
@r_bash
Hi again!

Thanks for the help in advance. Today I looked for some until loops again, however, I got a bit confused between the while and the until loop.

Here is my while loop:

read -r -p "Please insert your number 1 -10: " number

while $number -le 10
do
echo "Your number is $number."
number=$(( number+1 ))
done

Here below is my until loop:

read -r -p "Please insert your number 1 -10: " number

until $number -eq 10
do
echo "Your number is $number."
number=$(( number+1 ))
done

Still not pretty sure the differences between them. Kindly asking if someone would have more information and explain it, please. Really appreciate it guys!

https://redd.it/z2lyhw
@r_bash
lobash: a modern, safe, powerful library for Bash noscript development

## What is Lobash?

Due to its complex syntaxes with symbols, and Unix commands are different in platforms such like BSD and GNU utilities have different options and behaviors with same command name, Bash noscript development is complex and fallible.

Javanoscript has a powerful library Lodash for simplifying development. So I build Lobash to do similar works for shell development.

Lobash provides collections of functions to improve efficiency of shell development. It is compatible with Bash 4.0+ and MacOS/Linux/Alpine/Busybox systems.

It is implemented with pure bash noscript.

## Features

* Modular and easy to use. One module one Function.
* Semantic functions instead of recondite bash expressions, substitutions, expansions.
* Rich Functions. Over 120+ modules provided.
* Robust and Safe. Over 700+ test cases tested. Tested in Linux and MacOS with Bash 4.0\~5.2.
* Fast. 0.058s to load Lobash completely.
* Compatible with MacOS/Linux/Alpine/Busybox systems.
* Compatible with Bash 4.0 and higher versions.

\------

Today it released v0.5.0. If you like it, please click the Star button. Thank you.

[https://github.com/adoyle-h/lobash](https://github.com/adoyle-h/lobash)

https://redd.it/z2vgfi
@r_bash
grep: warning: stray \ before /

I am trying to run this noscript.

#!/bin/sh


movie=$(curl -s https://1337x.to/search/$query/1/ | grep -Eo "torrent\/0-9{7}\/a-zA-Z0-9?%-/" | head -n 1)
magnet=$(curl -s
https://1337x.to/$movie | grep -Po "magnet:\?xt=urn:btih:[a-zA-Z0-9]" | head -n 1)
peerflix $magnet -l -v


I get the error of grep: warning: stray \\ before / . I have tried to get rid of the \\ before the /. This did not work. Can anyone help me?

https://redd.it/z2vfx0
@r_bash
How to pass an associative array to another noscript

I want to pass an associative array in noscript1.sh to noscript2.sh. Here is what I have:

noscript1.sh:

declare -A queues
queues=( "key1"="value1" "key2"="value2" "key3"="value3" "key4"="value4" )

call noscript2:
noscript2.sh "$param1" "$param2" "$param3" "${queues@}"

noscript2.sh:

arg1=$1
arg2=$2
arg3=$3
declare -A arg4=$4

The associative array in noscript1 is fine. I can loop through the array and see its elements. However, when I tried to pass it to noscript2.sh, I can't see any of the elements in arg4. Thanks in advance.

https://redd.it/z2xyv5
@r_bash
Need help with sed and variables

Hi Everyone,

I've put together a sed for vnstat xml output for my openwrt router. (trying to get a cleaner output) My sed works if I have the year (2022) and month (11) in the sed command. When I replace 2022 with $y and 11 with $m, it doesnt work, no change in the output, like it doesn't recognize it.

​

The file looks like this:

2022 11 21 05:00 474322562 15172268
2022 11 21 06:00 536016232 651897033
2022 11 21 07:00 184569685 109642704

Here is what works (without the variables, just normal ):

vnstat --xml |grep -hnr "hour id" | sed "s/<^>>/ /g; s/2022//g; s/ //g; s/ 00/:00/g; s/11 /11-/g" | cut -d " " -f2- > houroutput.xml

-----------------------------------------------
and the output looks good:
11-21 05:00 474322562 15172268
11-21 06:00 536016232 651897033
11-21 07:00 184569685 109642704

&
#x200B;

my noscript looks like with the variables in sed, I even replaced the single quotes with double, but no change in output.

#!/bin/sh
y="date +%Y"
m="date +%m"

vnstat --xml |grep -hnr "hour id" | sed "s/<[^>]
>/ /g; s/$y//g; s/ //g; s/ 00/:00/g; s/$m /$m-/g" | cut -d " " -f2- > houroutput.xml

Output doesnt look good:
2022 11 21 05:00 474322562 15172268
2022 11 21 06:00 536016232 651897033
2022 11 21 07:00 184569685 109642704

https://redd.it/z31cfq
@r_bash
Somewhat probably generic post

What's your personal 'ah ha' moment when getting into learning bash? What made you think, "oh damn I need to know this"

https://redd.it/z3riln
@r_bash
read contents of a file into a variable with bash without invoking other commands?

Is there some internal bash way to do this?

x=$(cat /proc/uptime)

And i am not thinking about the line-by-line "while read l; do bla bla; done < file" (for various reasons).

https://redd.it/z3ue97
@r_bash
This media is not supported in your browser
VIEW IN TELEGRAM
I've been working on this CLI tool to automate creation of noscript files, modification of file permissions, and input typical text. I spend a lot of time in the command line for work, but consider myself still learning noscripting. If you have any input I'd appreciate it!
https://redd.it/z4hi9r
@r_bash
Sorting by size with ls -S and reading each first line of .txt files

So i have this task to sort .txt files by size and then reading the first line of each of them and displaying them

i do know that i can sort by size with ls -S

also for the reading and displaying part

for i in *.txt; do head -n 1 $i; done

problem is that if i put ls -S | before this ... it doesnt work .. like i get the output but its not sorted by size

i do know that there is an awk command, tried with that either, but i cant use it as its for class and we just started with bash so we have to stick to the .. "basics"

https://redd.it/z4mvws
@r_bash
Having trouble with a bash user creation noscript for homework

The bash noscript pulls some stuff out of a csv file (firstname, lastname, dob, group)

I can get that stuff into an array, but when I try to massage the data in the array, it tries to run one of the variables as a command.
Can someone tell me what I'm doing wrong?




\#!/bin/bash

\#set -x

testdata="/home/diana/testdata.csv"

declare -a fnames

declare -a lnames

declare -a dob

declare -a course

while IFS="," read -r Student_Firstname Student_Lastname Student_BirthDate Course_Data trash;

do

fnames+=("$Student_Firstname")

lnames+=("$Student_Lastname")

dob+=("$Student_BirthDate")

done<$testdata

\## usernames[index\]= ${fnames[index\]::1}${lnames[index\]} | tr [:upper:\] [:lower:\]

for index in "${!fnames[@\]}";do

\#this next line tries to "run" the username.
usernames= "${fnames[index\]::1}${lnames[index\]} | tr [:upper:\] [:lower:\]"

\# echo ${fnames[index\]::1}${lnames[index\]} | tr [:upper:\] [:lower:\]

\# echo ${fnames[index\]::1}${lnames[index\]::1}${dob[index\]} | tr [:upper:\] [:lower:\]

\# echo $usernames

\#printf ${fnames[index\]}

done

https://redd.it/z4niaz
@r_bash
Cron job for shell noscript not running

https://stackoverflow.com/questions/74577211/cron-job-for-shell-noscript-not-running

Full/detailed q in stack overflow above.

tl;dr cannot get my cron job to successfully execute a shell noscript, nor can I seem to get it to format as intended, despite the noscript working when called manually and absolute paths used for everything.

https://redd.it/z4mj18
@r_bash
Help with creating a noscript for transcoding files located in subdirectories with FFMPEG

Hi. I'm trying to write a noscript that locates all video files (.mkv in this case) from subdirectories, transcodes them with FFMPEG to HEVC, and stores the output in another HDD, **preserving the directory tree**.

**Example:**

I want to transcode /videos/pets/cats.mkv to HEVC and store the output inside /hdd2/pets/cats\_hevc.mkv

This is the noscript that I currently have, but it doesn't preserve the directory structure nor search in subdirectories (I tried to use 'find' but I couldn't create new folders in the output location):

#! /bin/bash
for file in *.mkv;
do
ffmpeg -i "$file" -pix_fmt yuv420p10le -map 0:v -map 0:a -c:v libx265 -crf 21 -preset slow -c:a aac -b:a 128k "/path/to/output/directory/${file%.*}_hevc.mkv";
done
echo "Conversion complete!"

How can I do that? I've been trying for hours but couldn't find a way to make it work.

Thanks.

https://redd.it/z4qa0n
@r_bash
Help with Bash homework, convert Uppercase to Lowercase in txt file

Hello, I have to write a line of simple Bash code to convert every Uppercase letter to lowercase in a .txt file.

Can anyone help?

https://redd.it/z5302q
@r_bash
no way to record PWD in the bash history i guess?

I want a better history, and did this


export HISTTIMEFORMAT="%F%H:%M:%S [$sshkeycomment] "

$ssh\
key_comment is figured out in a profile.d noscript and simply contains the ssh key comment of the key of the person that logged in (via ssh...). Or contains "n/a".

I can see that the timestamps are now recorded as a #-comment in .bash_history.

Its just one thing missing, would be nice to see the current PWD where the comment was entered.
Adding $PWD to HISTTIMEFORMAT doesnt work because thats simply not recorded in the history.

Might there be a trick to get it recorded anyway? :)
Cant see any way from the man page...

https://redd.it/z583sh
@r_bash