Learning more
I know the basic stuff (variables, if else, read,echo,etc) how would I learn more and where can I?
https://redd.it/17gxcb2
@r_bash
at plays command immediatley
any one shed any light as to why bash plays the alarm sound immediately rather than waiting for the specified time ?
​
\#!/bin/bash
​
​
strHour=$(zenity --forms --title "simple alarm clock" --text "Combo Hoour" --add-combo "Select Hour." --combo-values "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24") && echo $strHour
​
​
​
strMinute=$(zenity --forms --title "simple alarm clock" --text "Combo Hoour" --add-combo "Select Minute." --combo-values "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59") && echo $strMinute
if zenity --question --text="Set Alarm for $strHour:$strMinute ?"; then
zenity --info --text="You pressed \\"Yes\\"!"
ffplay /home/dunryc/Wip/alarmclock/alarm.wav | at $strHour:$strMinute
else
zenity --info --text="You pressed \\"No\\"!"
fi
​
​
https://redd.it/17gjexs
@r_bash
Sticky shift key or one time caps lock
Hello, I'm trying to modernize a bit the input methods in my computer since we've (or at least I) been suffering for decades the same falencies.
What I want is a method for activating caps lock until a letter is entered and then deactivate it.
**O**btaining this result, without the need to press any combination of keys.
But I don't want sticky shift all the time I just want to be able to choose betwwen different methods.
***E***ven a different implentation of the same code, could work... ***L***ike this. ***I*** mean turning on and off capslock automatically each time that the '. ' sequence is entered.
I wrote a bash script to do so that works well in the terminal but when associated with a keyboard shortcut gets totally lost. I think that read has no idea where it is, here is my script:
!/bin/bash
echo $caps_state
while true; do
read -rsn1 input
for letter in {A..Z} {a..z}; do
echo $input = $letter
if [[ "$input" == $letter ]]; then
caps_state=$(xset -q|grep Caps|cut -d: -f3|tr -d ' ')
echo $caps_state
if ! [[ $caps_state == off01 ]]; then
echo caps off
xdotool key Caps_Lock
exit
fi
fi
done
done
What keylogger should I use?
https://redd.it/17ge8a1
@r_bash
How can I time the bash processes blocking input
Bash is every now and then freezing while I'm typing a command.
Is there a way to time the "blocking" / unresponsiveness? A total time for the current session in bashrc somehow?
if my bash terminal is frozen waiting for lets say a tab completion on a dead fuse mount, time until its completed as in force closed, killed etc. Sry for my inability to explain it better/correctly.
In short, the time I waste and a way for me to track where its worst and how I can do better / look at whats going on. Maybe check the same in another shell with the history file etc. -Or is this stupidity?
https://redd.it/17g3h9w
@r_bash
Replacing underscores with " - " in folder and file names
I'm no stranger to bash but I'm out of practice. I'm trying to fix a huge archive of mp3's for someone and a ton of them used underscores and "illegal" characters in directory and filenames where it would read better to have a dash, i.e. "./Working/New/Classic_Country: Great Duets_Earl_Thomas_Conley_&_Tammy_Wynette-We_Believe_In_Happy_Endings.mp3:
Musicbranz Picard fixes all of this at the artist - title level, but the directory naming I just can't seem to fix with it's scripting. I've been using a simple bash script to just pull all the files out of the folders into the "New" folder which helps, but the folder structure helps a lot with identifying the albums and artists.
So I've been tinkering with a script to loop through the folders and then the files to find any with underscores and special or illegal characters (\^A-Za-z0-9._) and replace them with " - " but I just can't seem to find the right command. I can pull the files or folders I want with something like this
find /home/serenity/Working/New -mindepth 1 -type d -name '*_*'| while read dir ; do echo "$dir" ; done
but I can't seem to apply something like this to it tomove them to a proper dir/name
| sed -e 's/[\^A-Za-z0-9._-\]/ - /g'
https://redd.it/17frvv4
@r_bash
My Tips and Tricks for Bash Scripting After Writing Hundreds of Scripts
https://levelup.gitconnected.com/my-tips-and-tricks-for-bash-scripting-after-writing-hundreds-of-scripts-59987855b20a?sk=30564b4d311ac550cc2cfe4f0f426970
In this article I share my tips and best practices for writing scripts in Bash.
https://redd.it/17fj8x0
@r_bash
What's the difference between running `unset array_var` and `unset array_var[*]` given array_var is an array variable?
`array_var` is an array variable.
**First step:**
I unset `array_var` by running this command: `unset array_var[*]`. After that I ran this command: `set | grep array_var` and this was the output:
_=array_var
**Second step:**
I unset `array_var` by running this command: `unset array_var`. And again, I run this command: `set | grep array_var` and I see the same output:
_=array_var
My CLI looks this now:
user@apple:~$ set | grep array_var
user@apple:~$ array_var=(one two three four five)
user@apple:~$ unset array_var[*]
user@apple:~$ set | grep array_var
_=array_var
user@apple:~$ array_var=(one two three four five)
user@apple:~$ unset array_var
user@apple:~$ set | grep array_var
_=array_var
user@apple:~$
So does that mean `unset array_var[*]` and `unset array_var` commands have the same purpose. I am not actually sure about this tho.
Also what does `_=array_var` mean?
Also another important thing I noticed is that, if we follow the steps in a reverse order (second step -> first step) `_=array_var` is not output when `set | grep array_var` is run. So that means `_=array_var` was created only when running `unset array_var[*]`. It will be nice if someone explained this too.
Thanks.
https://redd.it/17fa9w8
@r_bash
How to develop apps for within shell?
I mean something like terminal train. Which language is used? Can you link me to a github repo for something similar?
https://redd.it/17enawo
@r_bash
Hopefully an easy question, though I doubt it
So, I've been re-learning bash scripting over the past year, and I'm getting fairly proficient again, like being able to write some types of scripts without having to look most things up anymore, but I've been working on a a couple of scripts, one of which isn't my own, but I'm kind of modifying the living bejeezus out of it. It's a basic ls alternative called 'formatdir' that was an example in "Wicked Cool Shell Scripts", and I transcribed it to my WSL environment when I started re-learning bash. I'm now working on adding filetype recognition, and several things are easy as pie to get working, like directories, scripts, pipes, stuff that has a dedicated file test option.
But now I'm starting to get into the weeds, and I'm kinda up to my waist in the river as it were, with trying to figure out like archives for the moment. Is there a way to test whether a file is an archive? Doesn't have to like recognize whether it's a zip or a tarball, I just need to have the script identify that "this file is an archive" so I can have it give the output for them the proper color.
https://redd.it/17effgd
@r_bash
Help with script to detect if my webcam is currently active
I’m trying to create a shell script to run on a schedule. I just want a simple yes/no, on/off, or any kind of Boolean to determine if the camera is in use so I can then run other automations.
Seems this is possible using ps or grep but I haven’t been able to figure it out.
https://redd.it/17e4gbn
@r_bash
Simple noob question
I have a long-running command running in an ssh shell (ubuntu). I have another command ready to execute afterwards, eg. sleep 30\n echo 1
or sleep 30; echo 1
.
If I ctrl-z the long-running command (eg. sleep), it will of course then execute echo. How can I ctrl-z, bg
, and disown
both lines such that I can log out of my ssh session without interrupting the process, and still run the second command once the first has finished?
As you may have guessed, the second command is a notification so I know when the first has finished :D
I've found this SU post: https://superuser.com/q/361790, but it doesn't seem to have any useful info on how to do this.
Any points in the right direction would be very appreciated; I'm sure there's an easy way to do this without restarting my long-running command to put it in a script.
​
edit: change markdown to rich text
https://redd.it/17d5eva
@r_bash
make: Error 1
I am trying to make the build folder with command "make" but keep getting Error 1:
make: \** [Makefile:54: build/server_multi.o\] Error 1
​
Here is a glimpse of my Makefile:
​
TARGETS = server_lim
LIBS = timelib
LDFLAGS = -lm -lpthread
BUILDDIR = build
BUILD_TARGETS = $(addprefix $(BUILDDIR)/,$(TARGETS))
OBJS = $(addprefix $(BUILDDIR)/,$(addsuffix .o,$(TARGETS) $(LIBS)))
LIBOBJS = $(addprefix $(BUILDDIR)/,$(addsuffix .o,$(LIBS)))
​
all: $(BUILD_TARGETS)
​
$(BUILD_TARGETS): $(BUILDDIR) $(OBJS)
gcc -o $@ $@.o $(LIBOBJS) $(LDFLAGS) -W -Wall
​
$(BUILDDIR):
mkdir $(BUILDDIR)
​
$(BUILDDIR)/%.o: %.c
gcc -o $@ -c $< -W -Wall
​
clean:
rm *\~ -rf $(BUILDDIR)
How can I fix this error?
https://redd.it/17cvfju
@r_bash
Function Arguments/Recursion
Hi, I'm pretty new in bash. I have a question, can you implement recursion in a function? For example:
You have a function fun1(). Can you "manually add" arguments or you have to do some work-arounds? Can you do something like calling fun1(int a, int b, int c) inside fun1? I'm trying to implement Knight's Tour in Bash but it's so damn hard in Bash (school stuff, I can't use C) Thank you!
https://redd.it/17cq92s
@r_bash
listing files in correct numeric order?
I have a directory that has files named like this:
S01E001.mp4
S01E002.mp4
S01E003.mp4
S01E004.mp4
S01E005.mp4
S01E006.mp4
S01E007.mp4
S01E008.mp4
S01E009.mp4
S01E010.mp4
S01E011.mp4
S01E012.mp4
S01E013.mp4
However, ls gives this output:
S01E010.mp4
S01E011.mp4
S01E001.mp4
S01E002.mp4
S01E003.mp4
S01E004.mp4
S01E005.mp4
S01E006.mp4
S01E007.mp4
S01E008.mp4
S01E009.mp4
S01E012.mp4
S01E013.mp4
Why does this occur?
https://redd.it/17cnflj
@r_bash
Upload files to ix.io
I wrote a small wrapper script for ix.io to make it more convenient to use from the terminal. It can also be used within vim with !! cmd 😉
Script: https://github.com/SimonWoodtli/dotfiles/blob/main/scripts/ix
Demo: https://github-production-user-asset-6210df.s3.amazonaws.com/66033447/276981265-7d80fe6e-cce9-4ac2-a4c1-6f5729bf27ac.webm
https://redd.it/17cegsm
@r_bash
Question about à Regular Expression
Hi,
I got a question regarding Regular expressions on Bash.
Currently doing the LPI exams, and one of the question is:
- What extented regular expression would match any mail address, like info@example.org ?
So came out with the following regex:
^[[:alnum:]]{1,}@([[:alnum:]]|-|\.){1,}\.[[:lower:]]{2,6}$
"^\S+@+\S+\.\S+"
is used to match any non-whitespace character but does it not includes specials chararacters such as question mark, exclamation mark and so on ? that are forbidden in a mail address ?
Sourcing dynamic color in PS1 from script (details in comments)
https://redd.it/17gfd86
@r_bash
This Is My Most Complex Bash Script To Date
I made an Arch install script fully in Bash that sets up my system and my dot files with only three simple commands.
The whole thing is hosted on gitlab at https://gitlab.com/mclartydan0505/savageos and the idea is that now anywhere in the world I can get my full system setup from the command line to my custom desktop in minutes.
I know this is kind of moot as an Arch install script considering the one that comes by default is pretty good, but this script also downloads my Awesome config and all the apps I like with all the configs I like.
It is rather minimal, only installing about 600 packages by default. I am working on adding one file section the chroot to allow the user to add any additional apps they want to install, it is easy to do I just need to find the time to write it and commit it.
​
If you would like to run it in a vm or on hardware I could take the input for any errors, I did a sanity check in a QEMU VM with UEFI and it worked as planned, but I would like to know how hardware responds.
The hardest part is that the archlinux-keyring always seams to be breaking in the live iso, but I think I found a setup that can get the keyring to work 99% of the time so the script can download git and run the pacstrap.
https://redd.it/17g6hmw
@r_bash
i'm a terrible journalist
### this is my journal editor setup
i keep using this script because it opens up the editor and names the file. if there was a previously named file it will show it side by side. keep the script here .local/bin/today
#!/usr/bin/env bash
# this journal for today
today=$(date +%Y-%m-%d).md
# last journal entry
past=$(ls -t1 *.md | head -n 1)
# open the editor like
if [ -f "$today" ]; then editor $today; else editor -O $today $past; fi
anybody have similar script helpers they use like this
https://redd.it/17fte6r
@r_bash
How do I go about cracking this?
I am given a task as part of my assignment and I am not sure if I didnt understand the question or not, regardless of how much I try I am not able to crack this file. This is the question:
You are given a ciphertext for which you know the start of the corresponding plaintext: “Our shared secret word is: ” (excluding the quotation marks). The remainder of the plaintext consists of a single word from a dictionary file, with no spaces, carriage returns or line feeds added. The plaintext was encrypted using 128-bit AES with CBC mode using a single openssl enc command with no salting used, and using a password (also from the dictionary file) that is shorter than 16 characters, with a single digit from 0-9 appended to the word before encryption. A key was generated from the password using the SHA-256 message digest (as part of the same, single openssl enc command). Your goal is to write a program using a shell script that would find the password and the remainder of the plaintext. As part of your script you should use the commandline tools provided by openssl to encrypt and decrypt messages in order to perform a brute-force cryptanalysis. I have been at it for I don't know how long and I am unable to crack this.
The files provided are cipher.unknown and a words.txt the file format for the cipher is not given as it just says unknown. Please help me with this. even a simple explanation will be helpful for me. Thanks in advance
https://redd.it/17fmqma
@r_bash
Decided to write an IRC client
https://github.com/wick3dr0se/irc-bash
https://redd.it/17ff2g7
@r_bash
Command fails in script, but succeeds from SSH terminal window. WTH?!
I'm baffled. I have this folder called Documents and it has a directory called, `Dir with (parentheis) and apostrophe's and [square brackets]`. I created this very basic script to demonstrate the behavior I am seeing and seek help. Here is the code:
# !/bin/sh
dirname=/share/Documents
IFS=$'\n';
for d in $dirname**/Dir*; do echo ls "\"$d\"" 2>&1; ls "\"$d\"" 2>&1; break; done
When I run the script, I am getting the following:
# ~/dateadded.sh
ls "/share/Documents/Dir with (parentheis) and apostrophe's and [square brackets]"
ls: cannot access "/share/Documents/Dir with (parentheis) and apostrophe's and [square brackets]": No such file or directory
When I copy&paste the first line of output from the script into the same terminal window's prompt from which the script is run, I get this as a result:
# ls "/share/Documents/Dir with (parentheis) and apostrophe's and [square brackets]"
total 20
4 drwxrwxr-x 2 admin administrators 4096 Oct 23 18:33 .
16 drwxrwxrwx 89 tntadmin administrators 12288 Oct 23 18:33 ..
That's what I am expecting from the script.
This server is a QNap NAS and I am running the script locally via a SSH terminal. I have tried running this with bash and sh. I have run `set` from the Terminal and from within the script and piped the output to files and put the differences into the script and (aside from the errors about read-only variables) still get the error. Enclosing the directory name in quotes should be sufficient but I even tried piping the directory name to `sed` to escape all the special characters. Still no love. I tried busybox and coreutils `ls` and `bash`. Nothing is working. I even tried running from Docker Containers running Ubuntu and Debian. STILL NO LOVE!
EDIT: I just tried changing the subdirectory of `$dirname` to a directory called `Scanned` that has absolutely no special characters at all. STILL NO LOVE!!!!!
Help?!
https://redd.it/17eyhzn
@r_bash
Administration tools for Linux (Bash)
Here are a few Bash scripts for Linux system administration, I am working to release a few more security oriented scripts. I would appreciate if you could take a look at them and give me feedback. Thank you very much!
https://github.com/javisys/System-Administration-Scripts-Linux
https://redd.it/17ejbrj
@r_bash
What situations call for a subshell?
As I'm following a tutorial on Bash, the topic on subshells has me stumped. For example, the tutorial makes use of a subshell in order to access a database. That leaves me to ask:
When should a subshell be used when running a script?
How important are they and what are the consequences of not using them?
https://redd.it/17ed5dy
@r_bash
How to replace tab with space in file only for tabs before letters, not numbers?
I have a file with contents of
X Y Z m
A B n
...
where X, Y, Z and A, B are words and m, n are numbers. They are in a tsv file, so all separated by tabs.
How can I substitute the tabs between the words X, Y, Z and A, B with spaces while keeping the tabs before the numbers m, n intact?
I thought about this (some regex?) but cannot think of a good solution.
EDIT: m,n can be larger than 9, so not necessarily single digits.
https://redd.it/17e204g
@r_bash
Help me increase the variable in array
I have my input parameters split using delimeter "=" and placed into array. How can I make this "1" variable into "2" on the next iteration of my loop.
While "$param" -le $#
do
arrPARAM=(${1//=/ })
arrPARAM=($(2//=/ }) should be what it looks like on the next iteration
arrPARAM=(${$count//=/ }) doesnt work, count=1 then plus 1 every iteration
https://redd.it/17cylmc
@r_bash
Yay! Got my Certificate of absurdity.
https://redd.it/17cr5wn
@r_bash
How to define parameters in a function in BASH?
Hello, I'm trying to write a Knight's Tour resolutor script in BASH but I need to apply recursion and don't know how without function parameters. For example, I want to use two functions, one that resolves the algorithm (knight_tour)) and a "main". I want to use recursion inside the knight_tour() function but I don't know how without parameters. I'm very new to BASH so I know it's atrocious. Thank you even for just reading! for i in {1..8}
do
prossimo_x=$((x+cavallo_movimento_x[i]));
prossimo_y=$((y+cavallo_movimento_y[i]));
scacchiera[prossimo_x, prossimo_y]=num_mossa;
​knight_tour $prossimo_x $prossimo_y $((num_mossa+1)) $scacchiera $cavallo_movimento_x $cavallo_movimento_y
​
https://redd.it/17cpidl
@r_bash
Backend Question Is dup2 how a UNIX shell, like Bash, does things like cat /dev/fd/5 5<<< foo
?
So I wanna know how a shell like Bash does this:
cat /dev/fd/5 5<<< "foo"
open(2)
, then duplicates it to fd 5 using dup2(2)
as in: dup2(fd, 5)
. Is that how it does this?5
in there!Saving variables to file
Ok so say I did this
Echo “this variable will be saved”
Read variable
How do I save that variable to a text file,what would be the syntax for it? Thanks
https://redd.it/17cbsbp
@r_bash