r_bash – Telegram
How do I use double quotes in a remote ssh this way?

Normally I would set the today variable like this:

today="$(date +'%m-%d-%Y %H:%M:%S')"

Since I'm doing it on a remote server I am doing it this way:

ssh -T root@192.168.1.4 << EOL
today=\$(date +'%m-%d-%Y %H:%M:%S')
echo "\$today"
EOL

But what if I wanted to use the double quotes like normal? How would I do that remotely?

https://redd.it/12m9e3x
@r_bash
quick question

Hello, I am making a noscript that installs and configures a bunch of stuff and I am having a problem with an EOF statement in a function. I am not sure if it works but VsCode and ShellCheck have both flagged it.

Code:

#adds desktop entries for WM's
dotdesktop () {
cat << EOF > /usr/share/xsessions/qtile.desktop
Desktop Entry
Name=Qtile
Comment=Qtile Window Manager
Exec=qtile start
Type=Application
Keywords=wm;tiling
EOF

cat << PIG > /usr/share/wayland-sessions/hypr.desktop
Desktop Entry
Name=Hyprland
Comment=Hyprland Window Manager
Exec=exec Hyprland
Type=Application
Keywords=wm;tiling;wayland
PIG
}

the errors are :

Couldn't parse this here document. Fix to allow more checks.
Remove indentation before end token (or use <<- and indent with tabs).

https://redd.it/12mn1l9
@r_bash
Need help filtering the output after phrase "Only Texts:"

[SOLVED]
Edit:

#!/bin/bash
xfce4-screenshooter --region --save /home/$USER/"formula.jpg"
p2t predict -i ./formula.jpg > ./output 2>&1
sed -n '/Only texts:/,$p' /home/bob/output | grep -v 'Only te>

`This worked`

I wrote a noscript to execute a command and only get part of the output return out of it. But I failed, Now I need your help to make the noscript return output which is after the string "Only Texts:".

The Script I used it [ChatGPT helped with the selection part]

#!/bin/bash
xfce4-screenshooter --region --save /home/$USER/Pictures/Screenshots/"formula.jpg"
output=$(p2t predict -i ./formula.jpg)
out=$(echo "$output" | grep -oP 'Only texts:.*?\$\$')
echo "${out:12}"

The output I recieve if I echo `output` is

```
$ ./pic2text
[INFO 2023-04-15 11:09:48,368 select_device:104] YOLOv7 🚀 2023-4-14 torch 2.0.0+cu117 CPU

[INFO 2023-04-15 11:09:48,368 __init__:161] Use model: /home/bob/.cnstd/1.2/analysis/mfd-yolov7_tiny.pt
[INFO 2023-04-15 11:09:48,544 __init__:597]
[INFO 2023-04-15 11:09:48,682 _get_model:178] use model: /home/bob/.cnocr/2.2/densenet_lite_136-fc/cnocr-v2.2-densenet_lite_136-fc-epoch=039-complete_match_epoch=0.8597-model.onnx
[INFO 2023-04-15 11:09:48,713 _assert_and_prepare_model_files:135] use model: /home/bob/.cnstd/1.2/ppocr/ch_PP-OCRv3_det_infer.onnx
[INFO 2023-04-15 11:09:48,760 _assert_and_prepare_model_files:110] use model: /home/bob/.cnocr/2.2/ppocr/en_PP-OCRv3_rec_infer.onnx
[INFO 2023-04-15 11:09:48,825 _assert_and_prepare_model_files:135] use model: /home/bob/.cnstd/1.2/ppocr/en_PP-OCRv3_det_infer.onnx
[INFO 2023-04-15 11:09:48,866 download_checkpoints:50] use model weights.pth from path /home/bob/.pix2text/formular
[INFO 2023-04-15 11:09:48,866 download_checkpoints:50] use model image_resizer.pth from path /home/bob/.pix2text/formular
[WARNING 2023-04-15 11:09:49,419 _showwarnmsg:109] /home/bob/.local/lib/python3.9/site-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3483.)
return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]

[INFO 2023-04-15 11:09:49,422 _analyze_one:338] Done. (68.7ms) Inference, (0.6ms) NMS
[INFO 2023-04-15 11:09:50,266 predict:119] In image: ./formula.jpg
Outs:
[{'position': array([[ 8, 15],
[ 459, 15],
[ 459, 110],
[ 8, 110]]),
'text': '$$\n'
'\\operatorname{d}={\\sqrt{\\left(x_{2}-\\chi_{3}\\right)^{2}+\\left(y_{2}-\\mathbf{y}_{1}\\right)^{2}}}\n'
'$$',
'type': 'isolated'}]
Only texts:
$$
\operatorname{d}={\sqrt{\left(x_{2}-\chi_{3}\right)^{2}+\left(y_{2}-\mathbf{y}_{1}\right)^{2}}}
$$
output
```

All, I want is (stuff after Only texts:)
```
$$
\operatorname{d}={\sqrt{\left(x_{2}-\chi_{3}\right)^{2}+\left(y_{2}-\mathbf{y}_{1}\right)^{2}}}
$$
```

Any help would be greatly appreciated

https://redd.it/12mrm5e
@r_bash
Execute local sh on remote machine

Hi guys, is there any way I can execute a noscript that's in my local machine on remote ones?

I need to run a series of test on several systems every day so, I made a noscript for It. Right now I have that noscript on a pen that I insert into each of those system, mount, and run but, if I could do this from my local machine it would be so much more efficient.


Any tips?
Thanks in advance.

https://redd.it/12n08ii
@r_bash
Pull variables, with specific prefix, from env and create request

I have a bunch of noscripts like this one with a bunch of variables defined.

I'm looking for a way to not define all of those and perhaps pull them from the env if there's a variable prefixed with IM_.

Any suggestions on how to...

1. Pull all the variables?
2. Create the request body string?

https://redd.it/12n0jrl
@r_bash
how to make a noscript write to a permission dienied file?

I want to make a noscript to change the brightness of my screen, but i cant seem to get permision to write to that file. ive tryed all sorts of sudoing, even tee , but notthing works. help. Also is it possible to make this write to the file without asking for sudo password everytime i want to use it, without haveing to change the permissions for the brightness file itself. ther is a program called brightnessctl that basicly does this and i wanted to try to write my own version.

\#!/bin/bash

echo "How bright do you want me? (0-255) : "

read brightnessAmount

echo $brightnessAmount | sudo tee /sys/class/backlight/brightness

https://redd.it/12o4tr9
@r_bash
Curious, how long did it take you to learn bash?

Also, did you have any programming knowledge prior?

https://redd.it/12p1oit
@r_bash
behaviour of GLOBIGNORE changed?

So far I have used GLOBIGNORE to prevent ssh-add from trying to load my public keys. My .bashrc contains (contained ...)

GLOBIGNORE="*.pub"
ssh-add ~/.ssh/id*


For a few days now I notice that ssh-add complains about permissions 0644 for my *.pub files so obviously it's trying to load them.

I changed the command to GLOBIGNORE="/home/*/.ssh/*.pub" and this helps, but I'm wondering if, when and why this changed, or am I totally on the wrong track?

I also tried the more generic /*/.ssh/*.pub (which would also work for /root) and this does not match for user home directories (only /root).

FWIW: our systems were upgraded from RHEL 7 to 8 recently, is there a connection?

https://redd.it/12p7218
@r_bash
A new paradigm file-manager

By accident I might stumble upon a new way of doing command line – in the project: [https://github.com/psprint/n-commodore](https://github.com/psprint/n-commodore). it is written in Zsh but can be run from any shell.

Basically it’s about 3 factors:

* panelize everything,
* grep everything,
* save everything.

Panelization is known from Midnight Commander - it means to capture command output into a list that can be browsed. Grepping is known from fzf. Screen saving is a new paradigm

In short, you have a new screen (a greppable panel) for each new command, which is saved to the disk (GDBM), and which can be fetched/navigated to, having also PWD dir and position in panel restored.

Asciicasts:

[https://asciinema.org/a/578076](https://asciinema.org/a/578076)

[https://asciinema.org/a/578088](https://asciinema.org/a/578088) (new features: 2 column view, man page viewing and ag/ripgrep/ack interface).

&#x200B;

https://preview.redd.it/71toi7je0mua1.png?width=767&format=png&auto=webp&v=enabled&s=e0f08dcb1fa9245a5b4d38e4061fb21ab4f83490

https://redd.it/12qh07j
@r_bash
Interesting grep behaviour after power outage

Flagged as help but just to draw an expert opinion if you care to comment. I am can sort this out with another pass of grep.

I have many folders called say “monthA, monthB, monthC… monthZ”

Each contains numerous text files either do or do not contain the pairs of letters AA, BB,CC. I only want to keep the ones that do have them.

I started a bit of grep and pipe with this:

 -v -E -l -r ‘ AA| BB| CC’ month*/ | while read line; do ram “$line”; done;


It takes an hour to do each monthX file. We had a power cut. It stopped grepoing halfway through say monthD.

Power came back on. When I booted up and started the grep and pipe again it left monthD partially deleted and started on monthD.

I guess there’s a flag or algo decision somewhere and that is expected. I would have expected it to either start again at monthA or halfway through monthD. Anyone shed any light? I suppose it marks monthD as done when it closes it abruptly or something.

https://redd.it/12r1uj4
@r_bash
Is it okay to include bash noscripting in an embedded systems end of studies project?

I would love to see if there is anyone here who included it in his/her end of studies project. I tried to only use python with Raspberry Pi, since it seems more known in my university, but I keep having problems with the Speech Recognition module.

Now I'm considering using a bash noscript (and a microphone) to record audio and turn it into text, and using python within the noscript to read (via speakers) the final output based on the text.

TLDR: Do you think the professors within the jury will approve of using bash in an embedded systems end of studies project?

https://redd.it/12rskkq
@r_bash
Split full path and filename into path and filename.

I am currently doing this using a for loop. There must be an easier way.


fullpathfile="/path/to/where/file/is/stored.txt"

I want path="/path/to/where/file/is/" and file="stored.txt"

https://redd.it/12rt67y
@r_bash
Why is it that a command run from the terminal command line produces line break but the same command run within bash noscript has no line break/

If I run the following commands

lsblk > junk2.txt

cat junk2.txt

I see output with line breaks in the output like

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

loop0 7:0 0 285M 1 loop /snap/atom/282

loop1 7:1 0 284.9M 1 loop /snap/atom/286

loop2 7:2 0 4K 1 loop /snap/bare/5

&#x200B;

But if I put assign the output of that command to a noscript variable and then echo that variable

temp1=$(lsblk)
echo $temp1
My output has no line breaks

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 285M 1 loop /snap/atom/282 loop1 7:1 0 284.9M 1 loop /snap/atom/286 loop2 7:2 0 4K 1 loop /snap/bare/5

So why do I get line breaks with the first approach but not the second? Is the difference explained by different behaviors between cat vs. echo?

Thanks very much.

https://redd.it/12rzx3b
@r_bash
Storing a directory path as a variable, then passing it on to the 'ln -s' (symbolic link) command?

I stored directory in a variable:
var=$"'/media/disk2/video/001.mp4'"

I confirmed the directory was stored with the echo command:
echo $var
The directory is displayed with the quotation marks as desired.

I then tried to pass it on to ln -s:
ln -s $var 001_link.mp4

I get the error message:
ln: target '001_link.mp4': No such file or directory

https://redd.it/12s6aze
@r_bash
DISCUSSION What if BASH could be used as a web server interpreter?

I've been BASHing for about 2 years now... it's changed my life.


The other day I was writing some code in PHP and it dawned on me, can I not find a way to run BASH as a web server interpreter?


Already I am managing SQL databases with BASH? I have used it to generate static HTML pages at regular time intervals. I have even used it to generate SVG and convert them into PDF files. It would be so nice to be able to make an index.sh rather than index.php... and I haven't yet found a problem I couldn't solve with BASH, except this?


Would like to get a discussion going and see what other people's views are, solely as a thought experiment. Would such an interpreter be practical and useful, or would it just be another dev tool in an ocean of dev tools?


No flaming please, I just want to have a righteous discussion/debate about if this sort of thing did exist now and how it would affect us as BASHers and/or the industry as a whole.

https://redd.it/12t6nnr
@r_bash
Aggregate multiple lines

I have a file that looks like this -

a 6509568
a 8011776
a 8011776
a 8011776
a 8011776
b 1112800
b 1369600
b 1369600

How do I make it look like -

a 38556672
b 3852000

https://redd.it/12t9df7
@r_bash
Pure bash password generator

I wrote something like this but *waay* too complicated a few months ago. I fully realize it's not up to CISA standards, but I needed a way to auto generate dev Mysql passwords inside containers on startup.

genpw(){
declare -i limit="$1"
declare pw=''
_instr(){
declare -r str="$1"
declare -i sl=${#str}
declare -r chr="${2:0:1}"
declare -i ndx=$((RANDOM % ${sl}))
echo "${str:0:ndx}${chr}${str:$((ndx+1)):$((sl-ndx))}"
}
while [[ ${#pw} -le $limit ]]
do
if [[ $((RANDOM % 2)) -eq 0 ]]; then
# lc ascii
pw="$pw"$(printf "\x$(printf %x $((97+(RANDOM % 26))))")
elif [[ $((RANDOM % 2)) -eq 0 ]]; then
# uc ascii
pw="$pw"$(printf "\x$(printf %x $((65+(RANDOM % 26))))")
elif [[ $((RANDOM % 2)) -eq 0 ]]; then
# digits
pw="$pw"$((RANDOM % 10))
fi
done
declare c
# often mandatory non alpha characters
for c in '#' '@' '%'
do
pw="$(_instr ${pw:0:$limit} $c)"
done
echo "$pw"
unset -f _instr
} # genpw()

ahare@box:~/wk$ genpw 30
lQki068h@kUqa#8ewbtqw%t8eZkGcN
ahare@box:~/wk$ genpw 40
zwxNg7xl5Fz%EJBzajXdAn2dPTh#kdcJp@gk3fgM

https://redd.it/12trtg2
@r_bash
Can anyone PLEASE help with this noscript!

When run it says : versions found then SELECT not found and Syntax error: "do" unexpected.

Can you help solve this (probable really simple error)?

&#x200B;

\#!/bin/bash

\# Get the name of the song from the user

read -p "Enter the name of the song: " song_name

\# Use find to search for all versions of the song in the Music folder

song_paths=$(find /home/Music -name "$song_name*")

&#x200B;

\# Print out a numbered list of the song versions and ask the user which one they want to play

echo "Versions of '$song_name' found:"

select song_path in $song_paths;

do

if [ ! -n "$song_path" \]; then

break

fi

done

\# Play the selected song using the default music player on the system

xdg-open "$song_path"

exit

https://redd.it/12txs4b
@r_bash