r_bash – Telegram
Replacing echo with printf broke my noscripts

Taking the advice in https://www.reddit.com/r/bash/comments/1519wby/why\_printf\_over\_echo\_noob\_question/ and elsewhere, I proceeded to do

sed -i 's/echo /printf \x27%s\\n\x27 /' bin/*.sh

Whereas echo had worked perfectly, many strings now mysteriously got truncated. I reverted back to echo and all is working well, again, but I'm intrigued why this happened. I tried replacing %s with %b but it made no difference.

Does printf %s not handle utf-8 correctly or something?

https://redd.it/1jxi95b
@r_bash
Why does this work?

    arg2list() {
local toset=$1
shift 1
# shellcheck disable=SC2145
# we actually want to eval on structured data.
# so mixing strings with arrays is the point
# shellcheck disable=SC2294
# and yes eval on a string negates the benefits of arrays,
# thats why we leave it an array.
eval "$toset=($@)"
}


Used in this function, which generates C code to stdout

    addFlags() {
local n flag before after var

# Disable file globbing, since bash will otherwise try to find
# filenames matching the the value to be prefixed/suffixed if
# it contains characters considered wildcards, such as `?` and
# `*`. We want the value as is, except we also want to split
# it on on the separator; hence we can't quote it.
local reenableGlob=0
if [[ ! -o noglob ]]; then
reenableGlob=1
fi
set -o noglob
# shellcheck disable=SC2086
arg2list before $1
# shellcheck disable=SC2086
arg2list after $2
if (( reenableGlob )); then
set +o noglob
fi

var="argv_tmp"
printf '%s\n' "char **$var = calloc(${#before[@]} + argc + ${#after[@]} + 1, sizeof(*$var));"
printf '%s\n' "assert($var != NULL);"
printf '%s\n' "${var}[0] = argv[0];"
for ((n = 0; n < ${#before[@]}; n += 1)); do
flag=$(escapeStringLiteral "${before[n]}")
printf '%s\n' "${var}[$((n + 1))] = \"$flag\";"
done
printf '%s\n' "for (int i = 1; i < argc; ++i) {"
printf '%s\n' " ${var}[${#before[@]} + i] = argv[i];"
printf '%s\n' "}"
for ((n = 0; n < ${#after[@]}; n += 1)); do
flag=$(escapeStringLiteral "${after[n]}")
printf '%s\n' "${var}[${#before[@]} + argc + $n] = \"$flag\";"
done
printf '%s\n' "${var}[${#before[@]} + argc + ${#after[@]}] = NULL;"
printf '%s\n' "argv = $var;"
}


Context
https://github.com/NixOS/nixpkgs/pull/397604


https://redd.it/1jx8bta
@r_bash
BASHAM! : A Simple Bash Script to Manage Your Assembly Projects.

I've been fooling away my days by doing my hobbies. I was supposed to learn assembly but my idiotic ass learnt bash noscripting instead. At least I can still learn assembly a bit with it...


BASHAM!

Yeah, that's the repo. I'm looking for attention so I get some more contributors... 🫤

https://redd.it/1jynn7o
@r_bash
check if entry is in Array for If Statement

Hi,


New to bash so still trying to understand how to do everything, but in the process of writing a simple backup noscript, now I need to expand it to use an array for the exclusion folder(s) and to get the if statement to ignore any folder in the array.

Can anyone help.

Thanks,


#!/bin/bash



# variables

SOURCE="/volume1/docker/"

DEST="/volume1/Backups/Docker-Backups/"

DATE=$(date +%Y%m%d_%H%M%S)

# EXCLUDE="dir1"

EXCLUDE = ("dir1" "dir2" "dir3")



#change to folder to backup from

cd $SOURCE



# iterate over subdirectories

for subdir in */; do

#Extract dir name

dirname=$(basename "$subdir")



# zip dir

# need to convert to use array

if [[ "$dirname" != "$EXCLUDE" ]];

then

zip -r "$DEST$dirname $DATE.zip" "$subdir"

fi

done



# delete old backup files

find $DEST* -mtime +7 -exec rm {} \;

https://redd.it/1jz387b
@r_bash
Do you unit test your Bash noscripts? If so, how?

Curious if anyone here uses a proper testing framework like bats or rolls their own setup? Or do you some set -euo pipefail, and hope for the best 😅

Scripts running in prod always welcome extra paranoia.

https://redd.it/1jzywm5
@r_bash
Is it possible to write a bash noscript that installs python automatically?

I'm developing a YouTube File Manager with python although I need a way for my fellow YouTubers to use it. Unless if there is a way to turn it into an executable version in all operating systems?

https://redd.it/1k0ilyw
@r_bash
Is this still valid for you in 2025?
https://redd.it/1k16lvl
@r_bash
What's the most "overkill but it works" bash noscript you've written?

Sometimes I catch myself writing 100-line bash noscripts for things that could probably be done in 5 lines with another tool... but where’s the fun in that?

Curious what ridiculous but functional bash noscripts you've created that made you go: "this is fine."

https://redd.it/1k1c9vg
@r_bash
Linux mint cinnamon

I have a school project and they've asked for a few screenshots showing the use of commands to create a tutorial book.
Commands like creating a file, then transferring the file to a different directory.
Everyone I attempt to use the command lines it doesn't work. I've looked up command "cheat sheets" I feel like I'm missing something

https://redd.it/1k1lxu9
@r_bash
How many REAL MEN are there out there who think sudo is for pussies and just do everything as root?

I can't be the only one.

https://redd.it/1k1tygt
@r_bash
Bash brain vs Python heart
https://redd.it/1k20dgg
@r_bash
How do you organize large Bash noscripts for better readability and maintenance?

I know “just use Python" but anyway, how do you keep bigger noscripts clean and maintainable? Any tips or examples?

https://redd.it/1k20ou8
@r_bash
How do I list directory contents while looking for FILENAME.EXT with find /directory -type f -name "*.EXT"

$ find /directory -type f -name "*.EXT" -exec





I don't understand how to properly list (ls) the contents of the path itself (the one containing the matched foo.EXT files).





I'm using this bad, ugly and weird workaround:
-exec bash -c 'ls -ahl "$(dirname "{}")/"' \;




Thanks

https://redd.it/1k2afs4
@r_bash
Bugz4Term fire automated commands right for your bug bounty arsenal disposal ( V1.1 )

A Bash tool that fires 4 horizontal terminator panes (2 in each tab) loaded with custom commands from .bugz4term.conf in CWD each line representing a custom command on the config to be loaded ( For terminator users Only! )

Do Checkout bugz4term ( V1.1 ) on Github!

https://github.com/Demgainschill/Bugz4Term

https://redd.it/1k2ylag
@r_bash
Bash: Interactive fuzzy string insertion from the tmux scrollback buffer into the shell prompt using fzf (Ideal for quickly inserting any string from the tmux history)
https://www.jamescherti.com/tmux-autocomplete-fzf-fuzzy-insertion-scrollback/

https://redd.it/1k37pek
@r_bash
Subingestor a subdomain enumeration bash tool using subfinder and dnsx inorder to find live subdomains for a given link.

Find Subdomains for a given link using Subfinder and dnsx inorder to find live subdomain links.

Please go checkout my tool on Github!

Also please do star if it is helpful ( And i'm sure it will be )

https://github.com/Demgainschill/Subingestor

https://redd.it/1k3i2ac
@r_bash
Curl doesn't return json

Can anyone tell me why this returns web page mumbo jumbo and not pure json? And how to get it to return jscon? Thanks

curl --url https://www.reddit.com/r/IAmA/comments/16h7303/i\_am\_a\_sleep\_expert\_ask\_me\_anything/.json

https://redd.it/1k3ozbn
@r_bash
ask about rsync: how do I write option for ignore permission?

Hi, I was using rsync -anchuv a/ b/ but doing reverse rsync -anchuv b/ a/ I realize that the permissions are not equal between files into a/ and b/ .
I read in man that -p is for preserve permissions
how do I do this: ignore permission? or I should use -apn?
flags chuv is of old use of -r insted of actual (today in use) -a...
Thank you and regards!

https://redd.it/1k3x9xr
@r_bash