r_bash – Telegram
Music sorting program

I challenged my friend to send me an entirely unorganized folder of song files. I am trying to organize this using bash, but the moon runes that is terminal speak are eluding me. Can I get some advice on how I would organize the song files into folders based on their album tag?

https://redd.it/15szpsp
@r_bash
Is there any point in migrating from ZSH to Bash?

Hi everyone, I've been using zsh for about 2+ years now & haven't had any complaints.

I recently thought of switching to Bash because of a new video "The Linux Cast" posted, but I'm not sure if it's actually worth it or just made for clickbait or something to talk about.

I'm a full-stack web developer for my job, but I've never really had to write any noscripts. I've VERY rarely had to SSH into a server, but when I have I'm pretty comfortable with the commands since I use zsh.

Is there any point in switching to Bash? I don't really use the terminal for much rather than basic stuff. I'm assuming if I ever have to write a Bash noscript, I would do it in an IDE and use a Bash shebang anyway, so not sure if there are any benefits to switching.

Thanks in advance!

https://redd.it/15t7wkg
@r_bash
Is there zsh/fish-like autosuggestions, completions, and syntax highlighting in Bash?

Hi everyone,

I've been using ZSH for about 2 years now, but I'm thinking of migrating to Bash. Does Bash have Fish-like features such as autosuggestions, auto-completion, or syntax highlighting?

In zsh, whenever I'm looking through a directory & press `Tab`, I'm able to move through the suggested directories as well. Not sure if this is available on Bash.

Thanks in advance.

https://redd.it/15t7q2h
@r_bash
Operation not permitted inside ec2 but works fine on local mac

​

https://preview.redd.it/tu8hrt8hpoib1.png?width=1512&format=png&auto=webp&s=cc6088e0a1de42aefcfc5b804c5e15b8ef0c8005

I have a bash noscript that basically downloads a few files inside /tmp
Inside the exit trap hander. all I am trying to do is cleanup
The rm -rf lines give me an operation not permitted error when run inside EC2 but work fine on the mac
If I add sudo rm -rf instead, it works fine on the EC2 instance but asks for a password on my mac
How do I resolve this?
Does it have some problems with /tmp? I can see that it belongs to root user and I am running commands as ec2-user inside my ec2 instance

https://redd.it/15tpy3l
@r_bash
find command to look for multiple files

Using bash 3.2 on a Macbook. I want to search the entire drive for files with specific names.

Thought the find command would be something like this:

find . -type f \\ (-name "test-1.2.14.rtf" -o -name "test-1.2.17.rtf" \\)

But that returns an error: unknown primary or operator.

Not sure what my mistake is.

​

https://redd.it/15txz07
@r_bash
awk conditional weirdness

awk{

x=$1

printf("%s", x);

if(x > 100){

printf("=%s", x)

}}

but the output is

5=5

https://redd.it/15u2its
@r_bash
home directory is spammed with temporary bash history files.

only has been a problem on fedora never happened on ubuntu(i still love fedora though). how do i fix it?

https://redd.it/15u5nk7
@r_bash
Need to extract variable from prompt


When I give command kinit then it prompts me to enter the password.
[root]:Inbound> kinit
Password for username@ip_address:

I want to extract the username from the prompt that has given.
I have used set -x to achive this but it seems very primitive way
This is the noscript I am using currently.

#!bin/bash
prompt="random_gibbrish"
set -x
kinit < $prompt > $PWD/output2.txt
set +x
user=$(cat $PWD/output2.txt | awk '{print $3}' | awk -F "@" '{print $1}')
echo USER:::$user

Terminal Output---
[root]:Inbound> sh kinit.sh
+ kinit
kinit.sh: line 4:random_gibbrish : No such file or directory
+ set +x
USER:::username

it is giving me the right result but is there another way to do this?
Noob here.. need to learn how to enclose code in proper lines while asking question.. sorry for that..

https://redd.it/15uf7f3
@r_bash
my PS1 ends with a tab character, using the "home" key to go to the beginning of the line messes up visually

so for example, if I have the following entered, where | means "the current cursor position":

echo hi|

and I press the following keys

<home>echo<space>

then I would expect the result to be

echo |echo hi

and this does work! but if I do it twice, something weird happens. if I press <end>

echo echo hi|

and then home again, the cursor goes inside the tab character

| echo echo hi

and now if I try typing "echo "

cho |eecho echo hi

if I try pressing enter, it is as if it was typed correctly, I do get echo echo hi. this seems to happen in both konsole and xterm so I think it is a bash bug not a terminal bug.

so to summarize, the necessary steps are: put a tab character at the end of PS1. type something. press home. type something. press end, then home again. type something.

is this news? does anyone know what I should do? my prompt actually ends with \!:<tab> so I can't just use space characters.

https://redd.it/15ukgbk
@r_bash
BASH-only C/C++ shell TermiC V1.3 released

Improvements:

\- Support #ifdef/#elif/#else/#endif

\- Support the tcc compiler

\- Add command history

\- Python terminal style Ctrl-D Ctrl-C

\- Various bug fixes

https://github.com/hanoglu/TermiC

https://redd.it/15un51s
@r_bash
How do I make my prompt always displayed at the bottom of the terminal?

If I cat a large file, I would like to scroll up and down while still having my prompt displayed at the very bottom to type into. Is there a way to do this?

Also an unrelated question but related question is there a way to get back to my prompt (quickly and without entering any keyboard entries) if I do cat a large file? I can press enter but that executes the command, space but that adds a space into the line, ctrl +c but that adds a ^C. Is there a correct way to have the prompt show back up?

https://redd.it/15uq7ov
@r_bash
This may be too much to ask but I'm writing a noscript to manage my game server and it's a complete mess. It's barely readable but it basically allows me to start, stop and (eventually) backup my server. Looking for efficiency and readability tips if possible! (hope a Pastebin link is ok)
https://pastebin.com/4LRp6RuQ

https://redd.it/15uyiph
@r_bash
Can't merge two objects passed as --argjson to jq

I've written the following noscript to generate snippets for shellcheck automatically based on this Markdown document:

#!/usr/bin/env sh

generatesnippets() {
gs
listurl='https://gist.githubusercontent.com/nicerobot/53cee11ee0abbdc997661e65b348f375/raw/d5a97b3b18ead38f323593532050f0711084acf1/shellcheck.md'

wget -O - "$gslisturl" 2> /dev/null |
jq -R '.' |
sed '1 s/"/"/; $! s/$/,/; $ s/"$/"/' |
jq 'withentries(
{
key: .value | capture("^- +\\[(?<x>SC\\d{4})\\]") | .x | ascii
downcase,
value:
{
prefix: .value | capture("^- +\[(?<x>SC\\d{4})\\]") | .x | asciidowncase,
denoscription: .value | capture("SC\\d{4}\\]\\(.*?\\) (?<x>.+)$") | .x,
body: ("# shellcheck ${1|disable,enable|}=" + (.value | capture("^- +\\[(?<x>SC\\d{4})\\]") | .x))
}
}
)'
}

snippet
path=../snippets/snippets.json
jq '$ARGS.named"generated" + $ARGS.named"source"' --argjson generated "$(generatesnippets)" --argjson source "$(cat "$snippetpath")"


generate_snippets function return snippets in this manner:

{
"sc1000": {
"prefix": "sc1000",
"denoscription": "$ is not used specially and should therefore be escaped.",
"body": "# shellcheck ${1|disable,enable|}=SC1000"
},
"sc1001": {
"prefix": "sc1001",
"denoscription": "This \\o will be a regular 'o' in this context.",
"body": "# shellcheck ${1|disable,enable|}=SC1001"
},
"sc1003": {
"prefix": "sc1003",
"denoscription": "Want to escape a single quote? echo 'This is how it'\\\\''s done'.",
"body": "# shellcheck ${1|disable,enable|}=SC1003"
},
"sc1004": {
"prefix": "sc1004",
"denoscription": "This backslash+linefeed is literal. Break outside single quotes if you just want to break the line.",
"body": "# shellcheck ${1|disable,enable|}=SC1004"
....

The problem is jq hangs with two objects passed as JSON arguments. I don't get why. I wanna merge these manually written snippets with my generated ones.

https://redd.it/15v0yf9
@r_bash
How to remove portion of file name via noscript ?

Hello. I am studying for my RHSCA exam. What would be the easiest way to remove all dates from these file names in a noscript? So the file names would be aaa, bbb, etc.

https://preview.redd.it/8dqw4nvr94jb1.png?width=1723&format=png&auto=webp&s=7c514d1e942966a14406d0b7393328d06519e48c

https://redd.it/15vov6k
@r_bash
Help with bash noscript needed

I need help with a noscript I am building, to auto install apps after re-installing Ubuntu. And particularly with part where I want to check if noscript runs in root mode.

read -rp "Enter root password: " sudo_password

if [ "$(echo $sudo_password | sudo -S whoami)" = "root" ]; then
echo "Setup has started..."
install_apps
cleanup
exit 0
else
echo "Incorrect password"
exit 1
fi

The code kinda runs, but I have the problem with IF condition, particularly sudo -S because, if I enter wrong password, sudo -S prompts to enter it again rather than executing else code block. After entering it few more times else block runs, but this is not optimal, is there a better way to check if root access is granted?

&#x200B;

https://preview.redd.it/ef6e7dbhz7jb1.png?width=560&format=png&auto=webp&s=fe73612f21730357b8defc3ecae7f2a2d96d4372

Obviously I am not a bash pro, I am doing it with AI help and some googling.

https://redd.it/15w515d
@r_bash
Help with comparing two file lists, only downloading new files in second list

I wrote a noscript that functions well most of the time but occasionally there is some weird behavior that I am having difficulty reproducing.

https://pastebin.com/wb4ytP5e

The problem that occurs is sometimes (usually when running the cronjob) it downloads the entire list of files instead of just the new files. Can anyone see any reasons in my code why this would happen?

My thinking is taking me towards line 75, where it checks to see if history.tmp exists. I don't think line 76 is producing unexpected behavior, I think for some reason it's not finding history.tmp and therefore in the else statement it's taking the entire history.log as the file list. Why wouldn't it find history.tmp? And why only during the cronjob? It runs fine when I run it manually. Could there be some sort of permissions problem? Like the cronjob doesn't have permission to run line 42, where history.tmp is created in the first place?

https://redd.it/15wa2ap
@r_bash
If ctrl + r and see a command with the arguments I like, is there anyway to extract just the arguments?

Say I have in my history

vi 1
vi 2
vi 3

and I have cat in my prompt right now. If I press ctrl + r, is there a way to transfer the 2 into my prompt so that it reads cat 2 with minimal amount of maneuvering? Can my original cat command survive in the prompt (ctrl + r likes to delete everything currently in my prompt)?

Is there a manpage I can read about reverse-search utility? All of the guides online pretty much say ctrl + r is all I need to know but I'm sure there's more to it.

https://redd.it/15wil10
@r_bash
list mounted storage devices and set them to variables.

First off I'm a complete noob at writing noscripts so I very well might be doing something stupid or over complicating things. I'm working on a noscript that will back up a select number of directories and saves them to another local directory. I'm trying to add a feature to select a mounted storage device to copy said backup to but I'm kind of stuck trying figure out how to achieve this.

This is the part of the code that works

USR=$(whoami)
day=$(date +%F+%H%M)
localdest=/home/$USR/Backups
dependencies="pv espeak tar"
temp=/tmp/temp_backups
SRC=/home/$USR/Pictures
SRC1=/home/$USR/Documents
SRC2=/home/$USR/.config
SRC3=/home/$USR/Desktop
backup=/home/$USR/RiceBackups

# Setup
if ls /home/$USR | grep RiceBackups || mkdir $backup ; then
echo "Setup complete, starting backup..."
else
echo "Setup failed."
fi
# Creates Backup
mkdir $temp &&
tar -cf - $SRC | pv -s $(du -sb $SRC | awk '{print $1}') | gzip > $temp/backup_Pics$day.tar.gz
tar -cf - $SRC1 | pv -s $(du -sb $SRC1 | awk '{print $1}') | gzip > $temp/backup_Docs$day.tar.gz
tar -cf - $SRC2 | pv -s $(du -sb $SRC2 | awk '{print $1}') | gzip > $temp/backup_Dot$day.tar.gz
tar -cf - $SRC3 | pv -s $(du -sb $SRC3 | awk '{print $1}') | gzip > $temp/backup_Desk$day.tar.gz &&
mkdir $backup/Rice$day
mv $temp/*.tar.gz $backup/Rice$day && echo "Backup complete. Saved to $backup" || echo "Backup failed."
rm -r $temp
# Clean out old backups default is 7+ days old
read -p "Clean out old rice? 7+ days old (yes/no) " yn

case $yn in
yes ) echo one sec, getting a mop;;
no ) echo exiting...;
exit;;
* ) echo invalid response;
exit 1;;
esac

echo cleaning up... one moment...
find $backup -mindepth 1 -mtime +7 -delete && echo done. || echo cleanup failed. soz.

#Copies backup to external drive
read -p "Would you like to backup to an external drive? (yes/no ) " yn

case $yn in
yes ) echo Getting list of available drives...;;
no ) echo exiting...;
exit;;
* ) echo invalid responce;
exit 1;;
esac

I copied this part for a selection menu online and am adapting it to work but this is where I'm lost.

#Select storage device menu
HEIGHT=15
WIDTH=40
CHOICE_HEIGHT=4
BACKTITLE="CopyRice V2"
TITLE="Select storage device"
MENU="Choose one of the following options:"

OPTIONS=(1 "Option 1"
2 "Option 2"
3 "Option 3")

CHOICE=$(dialog --clear \
--backnoscript "$BACKTITLE" \
--noscript "$TITLE" \
--menu "$MENU" \
$HEIGHT $WIDTH $CHOICE_HEIGHT \
"${OPTIONS[@]}" \
2>&1 >/dev/tty)

clear
case $CHOICE in
1)
echo "You chose Option 1"
;;
2)
echo "You chose Option 2"
;;
3)
echo "You chose Option 3"
;;
esac

How would I go about detecting all mounted drives and then setting them as variables to be used in this section? Again I very well might be over complicating a lot here haha

https://redd.it/15wmaxf
@r_bash
Is there a way in a noscript to enter commands with semi colon like in vim? (I dont know what this is called sorry)

&#x200B;

in vim you can enter a semi colon and then this appears at the end of the screen.

I tried looking this up but I had no idea how to word it.

https://redd.it/15worgw
@r_bash
Why is Bash needed to interpret the Homebrew install noscript?

I use zsh on macOS. The Homebrew installation noscript is:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Because I’m using zsh and not bash, I assumed that I should tweak the path to /bin/zsh (instead of /bin/bash) but this returns an error message saying that bash is required to interpret the noscript. Why is that? Thanks for the help!

https://redd.it/15wtydk
@r_bash