r_bash – Telegram
trying to number a variable. 1. causing an error 2. I don't know if this is the best way to do it

evalWithNum(){
i=1
listWithNum=$(while read line
do
printf '%d. %s' "$i" ""$line""
i=$((i+1))
done < "$list"
)
unset i
}

"$list" is

a

b

c

&#x200B;

the error is

cannot open a
b
c: No such file

https://redd.it/13r29fw
@r_bash
while loop skips steps?

I have a text file that has variable data a space then a path to a file.

DATA ./path/to/file

This is repeated several dozen times. I am trying to convert mkv files to mp4.


I then have the following code:


#!/bin/bash

if [ -z $1 ]
then
echo "Usage:"
echo
echo '$ ./mkv2mp4.sh "Title.of.TV.Show" file.list "1080p.h264"'
echo
echo "Where file.list is a space seperated file format as:"
echo
echo "S01E01 ./path/to/episode1.mkv"
exit
else
filelist=$2
extras=$3
shownoscript=$1
declare -a array
fi

while read -r mkvfile
do
array=( $mkvfile )
echo "Read from: ${array1}" >> mkv2mp4.log
echo "Write to: $shownoscript.${array0}.$extras.mp4" >> mkv2mp4.log
echo "Read from: ${array1}"
echo "Write to: $shownoscript.${array0}.$extras.mp4"
echo "Start: $( date )" >> mkv2mp4.log
#sleep 1s
ffmpeg -i "${array1}" -c:v copy -c:a aac "$shownoscript.${array0}.$extras.mp4"
echo "Done..."
sleep 1s
echo "Finish: $( date )" >> mkv2mp4.log
done < $filelist


If I run it, it gets to the end of the first video, then it skips almost the entire list and proceeds with one of the last videos in the list. If I comment out the ffmpeg line, it doesn't skip anything.


Any help would be appreciated.

https://redd.it/13rng0x
@r_bash
Detecting Chinese characters using grep

I'm writing a noscript that automatically translates filenames and renames them in English. The languages I deal with on a daily basis are Arabic, Russian, and Chinese. Arabic and Russian are easy enough:

orig_name="$1"
echo "$orig_name" | grep -q "[ابتثجحخدذرزسشصضطظعغفقكلمنهويأءؤ]" && detected_lang=ar
echo "$orig_name" | grep -qi "[йцукенгшщзхъфывапролджэячсмитьбю]" && detected_lang=ru


I can see that this is a very brute-force method and better methods surely exist, but it works, and I know of no other. However, Chinese is a problem: I can't list tens of thousands of characters inside grep unless I want the noscript to be massive. How do I do this?

https://redd.it/13rqfjd
@r_bash
Need a firebase tools passthrough noscript

Unabasheldy asking....
Can someone help me figure out resources how to...,to write a passthrough noscript..not a bash noscripter..but I need one...if you have a fiverr let me know.


So simple thing...I want the user of my noscript (mostly me) ....to run a certain command before running the command with the arguments passed to it...in this case the command is "firebase deploy"...and it usually is something like "firebase deploy --only firestore:rules"

Problem is that sometimes my configuration is in the wrong environment.


There is another command I can use to get the current project...
"echo $(firebase use)"


So I want to run my noscript ..lacking a name...lets just call it "kissanddeploy" like this "kissanddeploy --only firestore:rules"

I want it to run..."echo $(firebase use)"
which should output "dev-foobar" or "prd-foobar"...if the name includes "prd-" in the response...I want to ask the user...


"Are you sure you want to deploy to production?"


...and a Y/N answer before itʻll execute the command passed into it from the CLI...if "N" is answered then it exits. Otherwise it executes whatever was after...like "firebase deploy --only firestore:rules"


Long story short...I accidently deployed to production when I meant to deploy to dev...and it had the potential to break something big...and I do not want that happening ever again..

Anyone wrote a passthrough noscript like this I could take a look at?


Thank you.

https://redd.it/13rw7ya
@r_bash
Environment set-up problems with bash (ros2iron)

Hello! I am very new to this, and this seems like a extremely trivial problem, but I have no idea how to fix it. I am following the steps to build ros2\
iron from source on Ubuntu, everything worked great until the final step, where I have to set up the environment. The tutorial gives this command:

. \~/ros2_iron/install/local_setup.bash

I checked, the file is there, everything looks good. But, when i run that command instead of taking me to that directory to get the local_setup.bash file, it takes me here:

"/home/parallels/ros2_iron/install/rosbag2_transport/share/rosbag2_transport/local_setup.bash" so its looking for it in in the wrong place. I am new to bash and ros in general, so I really don’t know why when I explicitly type in the path where it must find the file, it looks for the file a couple of folders deeper. I have tried removing the contents from my .bashrc and .profile files, as I thought maybe there was some path variable that it was following, but that did not help. I am at a loss. Again i know this is likely a very trivial error, but I have no clue how to solve it, so any input would be greatly appreciated!! :)

Also I am running Ubuntu 22.04 ARM64 on a Mac through Parallels.

https://redd.it/13s8615
@r_bash
Speed up inter process communication

Inspired by this post by u/jkool702, I am interested in ways to speed up inter process communication in which a process reads from an anonymous FIFO to receive messages at a rate of around 10-40Hz from other processes. The context is here:

https://github.com/lynxthecat/cake-autorate/blob/16f6c467b2f3faeff935c6d0ccfa23a53eeeaba3/cake-autorate.sh#L1877

Right now each read is byte-by-byte, and I gather one way to overcome that would be to use fixed width writes and read using -N.

Any other ideas?

u/jkool702 you indicated that you ended up writing to files and using 'cat'. Would that work in the above context in which I need to read lines at around 10-40Hz?

https://redd.it/13sgo9y
@r_bash
best way to read settings from a file?

One of the noscripts I am making, I am going to put the settings in a seperate file that the user can modify. But what is the best way to get the settings into the main noscript: Grep? Awk and Line numbers?

https://redd.it/13su4kp
@r_bash
exec "$0" "$@" causing getopt invalid option

I have noscripts that update themselves to the latest version from github. After they update I want them to run the updated noscript, but `exec "$0" "$@"` results in the noscript having getopt errors.

If I run the noscript with "`noscript.sh``-snfr`" it runs as it should.

If I run the noscript with "`noscript.sh``-s -n -f -r`" it causes a getopt error.

In bash 4.3.43 the error is:

getopt: unrecognized option '- -n -f -r'

In bash 4.4.23 the error is:

getopt: invalid option -- ' '
getopt: invalid option -- '-'
getopt: invalid option -- ' '
getopt: invalid option -- '-'
getopt: invalid option -- ' '
getopt: invalid option -- '-'

Here's the part of the noscript causing the issue:

#!/usr/bin/env bash

usage(){
cat <<EOF
Usage: $(basename "$0") [options]
Options:
-s, --showedits Show edits made to <model>_host db and db.new file(s)
-n, --noupdate Prevent DSM updating the compatible drive databases
-m, --memory Disable memory compatibility checking
-f, --force Force DSM to not check drive compatibility
--restore Undo all changes made by the noscript
-a, --autoupdate Auto update noscript (useful when noscript is scheduled)
-h, --help Show this help message
-v, --version Show the noscript version
EOF
exit 0
}

# Save options used
#args="$*"
args=("$*")

# Check for flags with getopt
if options="$(getopt -o abcdefghijklmnopqrstuvwxyz0123456789 -a -l \
restore,showedits,noupdate,nodbupdate,memory,force,help,version \
-- "$@")"; then
eval set -- "$options"
while true; do
case "${1,,}" in
--restore) # Restore changes from backups
restore=yes
break
;;
-s|--showedits) # Show edits done to host db file
showedits=yes
;;
-n|--nodbupdate|--noupdate) # Disable disk compatibility db updates
nodbupdate=yes
;;
-m|--memory) # Disable "support_memory_compatibility"
ram=yes
;;
-f|--force) # Disable "support_disk_compatibility"
force=yes
;;
-h|--help) # Show usage options
usage
;;
-v|--version) # Show noscript version
noscriptversion
;;
--)
shift
break
;;
*) # Show usage options
echo -e "Invalid option '$1'\n"
usage "$1"
;;
esac
shift
done
else
echo
usage
fi

# Show options used
#echo "Using options: $args"
echo "Using options: ${args[@]}"

# Copy new noscript over current noscript
echo "Reload noscript? [y/n]"
read -r reply
if [[ ${reply,,} == "y" ]]; then
echo -e "------------------------------------------------------------\n"

#echo "debug: exec" "$0" "$@" # debug
#echo "debug: exec" "$0" "$args" # debug
echo "debug: exec" "$0" "${args[@]}" # debug

#exec "$0" "$@"
#exec "$0" "$args"
exec "$0" "${args[@]}"
fi

https://redd.it/13t2jcc
@r_bash
find, filenames with leading "-", but cannot use "--"

I have a wrapper noscript around find (and a few other) command. The noscript itself is using Bash's getopts and double dash -- to stop parsing options works as intended. However, there is a problem when giving the arguments over to find command. If a file is a relative path and starts directly with a dash such as -New File, then find command will fail. All other tools and the noscript are handling this correctly. My problem is, I can't use -- with find, because options need to appear after the filenames.

So my question, what should I do? The idea is, if filenames start with a dash, then I can safely add ./ in front of them. For anyone who wants to have a look at the code (over 500 lines of code): https://github.com/thingsiplay/findpick/blob/main/fp and here is how I run find at the moment:

files="$(find "${symlinks}" \
-O3 \
"${@}" "${stdin@}" \
-readable \
-nowarn \
-maxdepth "${optmaxdepth}" \
${xdev} \
${opt
type} \
${executabletype} \
-name "${all
pattern}" \
"${filtermode}" "${filterpattern}" \
-regextype posix-extended \
"${extendedmode}" "${extendedpattern}" \
-print \
2>/dev/null)"

About the unquoted options, I know that is usually not very safe to do. But these options are controlled and cannot be anything else than correct or empty (in theory). My focus is on "${@}" "${stdin[@]}" \ .

If adding ./ is my only option (the only one I can think of at the moment), how would I do that efficiently for both, positional arguments list and stdin array?

https://redd.it/13t9dmd
@r_bash
Opinions about Bash customization project

Hello all,

I would love to hear some of your opinions about my OpenSource project that allow you to enhance your bash experience. It's called HomeSetup and can be installed or tried in a docker container.

https://github.com/yorevs/homesetup

Appreciated any of your help

https://redd.it/13tcs1f
@r_bash
Should i order an Index array with a side of hash?

I have a program i wish to run on my system every so often. It will query some websites with some flags, etc...

My thought is to have an indexed array, where each entry would hold several values, such as:
-Name
-url
-flags
-destination

Is this the best approach using bash or is there a better way to implement this? At the moment, my plan is to have the structure fully initiated within the noscript and not dynamically changed during execution. (I haven't used bash in years, hence my question.)

Thank you for your time,
Q

https://redd.it/13td3kg
@r_bash
How to include a horizontal line after a command?

E.g.:

$ echo 'Hello world'
Hello world
──────────────────────────────────────

https://redd.it/13u9fnj
@r_bash
Modifying sshto (dialog) with host flags?

Hi. I've been using the sshto noscript/dialog for some time now and really enjoy using it.

&#x200B;

I also use Kitty browser, and tend to use a "kitten" when ssh'ing to production machines so that my terminal's color scheme changes. This way I can quickly differentiate between production/mission-critical machines and ones that aren't so I'm less likely to make a stupid mistake on a production host.

&#x200B;

I have been able to do this so far by putting all these hosts under a single group and then I modified sshto's go_to_target function to launch a kitten when the target is a member of that group. It only works if I have the view filtered by that group, though, and it also prevents me from categorizing hosts like I'd like.

&#x200B;

I had the idea to add a tag to these devices in the ssh conf files, probably something like PROD# after the host denoscription (ex. Host prod-serv1 #Primary Server#PROD#). But, picky jerk that I am, I don't want to see this tag in the dialog list. Or if I have to see the tag I'd like to move it to it's own column. IDK how to do this.

&#x200B;

I've tried adding the tag and then stripping it out of the displayed denoscription by way of regex, but it seems that the go_to_target function is actually using strictly what's visible in the dialog, so if it's not visible I can't use it to choose behavior. So then I though about adding a third column, something like a one-character flag (ex. Host prod-serv1 #Primary Server#P#), but I can't figure out how to modify the dialog to add this extra column. Every way I've tried either makes no difference or shows the additional data but still only displays two columns so all the data gets out of line. Can anybody provide any suggestions on how I could achieve either of these goals?

&#x200B;

I posted in the sshto github as well, but in my tinkering and research I've seen several discussions around sshto and thought somebody may have some ideas here and I wouldn't have to bug the developer with a feature that I'm possibly the only person interested in. (Github post)

https://redd.it/13uhywm
@r_bash
Escape value \x1b echoing problem

Having escape value echoed, it removes subsequent echo's alphanumeric character. Here's the code:

#/bin/bash
#
echo "12345"
echo $'\x1b'
echo "12345"
echo "12345

Script output:

12345

[empty line\]

2345 <--- lost the first character

12345

Evidently there is some built in magic for escape value, but what can it be? Is there an idiomatic way to "flush" the effect of '\\x1b' in terminal stream (did try sed, stty, printf etc., but no solution)?

https://redd.it/13uob2m
@r_bash
what does a -z option in a bare if statement do?

Hi.

Am new to bash. I'm looking over a project and I'm seeing a -z option. I can't find any info on this online,

it's something like this:

if [ -z "$APP_CONFIG" ! -z "$CONFIG_DIR" ]
then ...

What is this exactly doing?

Cheers

https://redd.it/13v3dv8
@r_bash
how to make read command send highlighted text message


while true; do

read -p "Enter an argument : " arg

trans "$arg"

done

https://redd.it/13v32aq
@r_bash
Integrating Bash noscripts with Publish-Subscribe Messaging
https://m10k.eu/2023/05/27/toolbox-pubsub.html

https://redd.it/13vmggc
@r_bash
Question regarding shell

First of all, I am sorry for asking a silly question.


echo "/usr/bin/bash" > myls


Now when i run ./myls (after setting permission) it should open my shell right but i am not getting any output, why is that happening?

https://redd.it/13vnhym
@r_bash