I wrote a professional interrupt noscript that does a lot more than simply pause and I am trying to consider a unique name for what it does. Explanation below.
Originally I just simply called it pause. Nothing fancy, I was simply looking to create something like the pause command provided in DOS but I wanted to add the features that I wanted to be able to utilize in a sysadmin environment that I always had to hard code in.
This project was a great learning experience in bash coding and I learned a mountain of information doing this. I started out more so to save myself writing dozens of lines of code to get a timer and I would have to spend a couple hundred lines of code and still not getting what this offers up in a single command.
Once I discovered the internal monotonic clock I was on a mission to make a timer that could keep accurate time as long as the noscript is running and will accept timing down to 0.005 if needed. This is a high precision timer capable of fractional timing and millisecond captures but can simply say, "Press [Enter\] to continue..." and wait as long as it takes as a block timer or use the monotonic clock on a timer that checks for keypress every 0.01 seconds until the timer reaches zero. I have kept it so that there is little to no demand on the processor and the countdown only updates when needed. Script can be used as a "gatekeeper" for directing piped data. Data can be directed by command substitution into variables as needed.
All secondary information is sent to stderr while only the keypress and the gatekeeper piped information directed to stdout.
After some months of trial and error I finally am very close to a refined product. I will be releasing with GPL3.0+ license.
I added:
\-a, --allowed CHARS (Only defined characters to be considered valid keypress. Case sensitive. Valid keys can be A-Za-z0-9, Enter, space)
\-c, --case (change -a to case insensitive)
\-C, --color OPTIONS (allow colorization with optional foreground and background color values as well as attributes to prompt, timer, and response or none. default colors are prompt=blue, timer=red, response=green)
\-d,--default (the default key press to send to stdout for capturing if timer reaches zero without key press)
\-e, --echo (echo the key press to stdout for capture)
\-i, -in-pipe (use noscript as a gatekeeper noscript to capture and direct output to stdout.)
\-j, --json PATH (writes all variable and system data in single line output without jq allowing for use on Mac as well as Linux. JSON output is Splunk, ELK, etc, ready allowing easy integration into current setups. See -l,--log for more)
\-l, --log PATH (all internal system values and data can be shared to both .log and .json simultaneously. )
\-p, --prompt TEXT (change from the default prompt "Press [Enter\] to continue...")
\-q, --quiet (run quiet, no output to stderr except response. Fastest response times down to 0.005. Theoretical floor of 0.002 is possible but not without some processor overload)
\-r, --response TEXT (add response after continuation)
\-t, --timer SECONDS ( I have used a monotonic timer for the clock so there is no lag or jump with the clock and keeps accuracy for extended periods. I have also added fractional capabilities for quick server queries that with no text output has a floor of .005 seconds and 0.01 for text output intervals respectively. Timer format is [YYyr:MMmn:DDdy:HH:MM:SS\])
\-u, --urgent SECONDS (adds a bold red color to turn at the given number of seconds)
\-x, --extend (sends all variable and system data via stderr to either tyy/terminal [default\], [-l\] log file path or [-j\] json file path)
That is the extent of the options that I have included so far, not including help text for general use [-h, --help\] and color utilization [-Ch or --help-color\] and version [-v\] information.
I specifically designed this with the goal of only using bash internals for every task, updating to more modern internals depending on the bash version.
I have specifically designed in Mac 3.5 bash compatibility as well as
Originally I just simply called it pause. Nothing fancy, I was simply looking to create something like the pause command provided in DOS but I wanted to add the features that I wanted to be able to utilize in a sysadmin environment that I always had to hard code in.
This project was a great learning experience in bash coding and I learned a mountain of information doing this. I started out more so to save myself writing dozens of lines of code to get a timer and I would have to spend a couple hundred lines of code and still not getting what this offers up in a single command.
Once I discovered the internal monotonic clock I was on a mission to make a timer that could keep accurate time as long as the noscript is running and will accept timing down to 0.005 if needed. This is a high precision timer capable of fractional timing and millisecond captures but can simply say, "Press [Enter\] to continue..." and wait as long as it takes as a block timer or use the monotonic clock on a timer that checks for keypress every 0.01 seconds until the timer reaches zero. I have kept it so that there is little to no demand on the processor and the countdown only updates when needed. Script can be used as a "gatekeeper" for directing piped data. Data can be directed by command substitution into variables as needed.
All secondary information is sent to stderr while only the keypress and the gatekeeper piped information directed to stdout.
After some months of trial and error I finally am very close to a refined product. I will be releasing with GPL3.0+ license.
I added:
\-a, --allowed CHARS (Only defined characters to be considered valid keypress. Case sensitive. Valid keys can be A-Za-z0-9, Enter, space)
\-c, --case (change -a to case insensitive)
\-C, --color OPTIONS (allow colorization with optional foreground and background color values as well as attributes to prompt, timer, and response or none. default colors are prompt=blue, timer=red, response=green)
\-d,--default (the default key press to send to stdout for capturing if timer reaches zero without key press)
\-e, --echo (echo the key press to stdout for capture)
\-i, -in-pipe (use noscript as a gatekeeper noscript to capture and direct output to stdout.)
\-j, --json PATH (writes all variable and system data in single line output without jq allowing for use on Mac as well as Linux. JSON output is Splunk, ELK, etc, ready allowing easy integration into current setups. See -l,--log for more)
\-l, --log PATH (all internal system values and data can be shared to both .log and .json simultaneously. )
\-p, --prompt TEXT (change from the default prompt "Press [Enter\] to continue...")
\-q, --quiet (run quiet, no output to stderr except response. Fastest response times down to 0.005. Theoretical floor of 0.002 is possible but not without some processor overload)
\-r, --response TEXT (add response after continuation)
\-t, --timer SECONDS ( I have used a monotonic timer for the clock so there is no lag or jump with the clock and keeps accuracy for extended periods. I have also added fractional capabilities for quick server queries that with no text output has a floor of .005 seconds and 0.01 for text output intervals respectively. Timer format is [YYyr:MMmn:DDdy:HH:MM:SS\])
\-u, --urgent SECONDS (adds a bold red color to turn at the given number of seconds)
\-x, --extend (sends all variable and system data via stderr to either tyy/terminal [default\], [-l\] log file path or [-j\] json file path)
That is the extent of the options that I have included so far, not including help text for general use [-h, --help\] and color utilization [-Ch or --help-color\] and version [-v\] information.
I specifically designed this with the goal of only using bash internals for every task, updating to more modern internals depending on the bash version.
I have specifically designed in Mac 3.5 bash compatibility as well as
going down to internals in 2.0+ to be able to still used on very old machines.
The noscript is around 1100 lines at the moment and will be ready for final disclosure once I can find a permanent name that says more than simply "pause".
Any suggestions?
I would also like to hear what could be introduced that would make this a utility that would be more of benefit for the server side as well as the general user. I think I have a pretty good product right here and am excited to have others see the final product soon. 🙏 Thanks
https://redd.it/1qjlkiy
@r_bash
The noscript is around 1100 lines at the moment and will be ready for final disclosure once I can find a permanent name that says more than simply "pause".
Any suggestions?
I would also like to hear what could be introduced that would make this a utility that would be more of benefit for the server side as well as the general user. I think I have a pretty good product right here and am excited to have others see the final product soon. 🙏 Thanks
https://redd.it/1qjlkiy
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
bash noscripts for the daily tasks
hey everyone! i’m sharing a small project that just hit what feels like a 1.0 version
---
## brief context
i started this project a few years ago as a collection of simple noscripts (that's why it has that name)
later i tried zsh + oh‑my‑zsh but never really took the time to learn how it all works
i moved back to bash (currently im using zsh and bash) and decided to build a clean, custom setup that still works in both bash and zsh, so i update the project
---
## what it is
simply, a collection of small helpers organized by topic/modules. the helpers are basically:
- noscripts (standalone commands)
- functions (run in the current shell context)
- aliases
the project has a simple noscript to setup all the things (in the README there is more context), basically the setup adds a block to your shell rc that wires the noscripts into
---
## what i learned
- improved my shell noscripting skills (-:
- learned more about bash vs zsh differences (especially config/behavior)
- got clearer on when to use noscripts vs functions vs aliases
- built a consistent structure to keep things maintainable
here is the link to the repo, any comments or feedback is welcome!
https://redd.it/1qjjaq2
@r_bash
hey everyone! i’m sharing a small project that just hit what feels like a 1.0 version
---
## brief context
i started this project a few years ago as a collection of simple noscripts (that's why it has that name)
later i tried zsh + oh‑my‑zsh but never really took the time to learn how it all works
i moved back to bash (currently im using zsh and bash) and decided to build a clean, custom setup that still works in both bash and zsh, so i update the project
---
## what it is
simply, a collection of small helpers organized by topic/modules. the helpers are basically:
- noscripts (standalone commands)
- functions (run in the current shell context)
- aliases
the project has a simple noscript to setup all the things (in the README there is more context), basically the setup adds a block to your shell rc that wires the noscripts into
PATH and loads the functions and aliases, maybe is like a oh-my-zsh but much much simpler hahaha---
## what i learned
- improved my shell noscripting skills (-:
- learned more about bash vs zsh differences (especially config/behavior)
- got clearer on when to use noscripts vs functions vs aliases
- built a consistent structure to keep things maintainable
here is the link to the repo, any comments or feedback is welcome!
https://redd.it/1qjjaq2
@r_bash
GitHub
GitHub - tridimensionaal/Bash-noscripts-for-daily-task: A list of bash noscripts to automate simple tasks of the daily routine.
A list of bash noscripts to automate simple tasks of the daily routine. - tridimensionaal/Bash-noscripts-for-daily-task
ct (Command Trace) is a Bash command resolution tracer that explains how Bash resolves a command and what the kernel ultimately executes.
https://redd.it/1qio8bj
@r_bash
https://redd.it/1qio8bj
@r_bash
I mapped the 130+ tools winning the AI Engineering race. Link: https://akshayparihar07.github.io/aiEngineeringResources/
https://redd.it/1qjfr3w
@r_bash
https://redd.it/1qjfr3w
@r_bash
Send data
Hello, I'm working on a project and I have a question. I want to send a DNS query from my machine. So I created a binary query with the appropriate headers. But is there a command on Linux that allows sending data, specifically a binary file, over the network, and if so, does this command include a header? Thank you for your answers. And please, only those who really know can answer.
https://redd.it/1qj2cjp
@r_bash
Hello, I'm working on a project and I have a question. I want to send a DNS query from my machine. So I created a binary query with the appropriate headers. But is there a command on Linux that allows sending data, specifically a binary file, over the network, and if so, does this command include a header? Thank you for your answers. And please, only those who really know can answer.
https://redd.it/1qj2cjp
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Custom skript for screen rotation
Hey guys. I am completely new to bash programming, but i have a small annoyance with my new device, that i want to fix:
I want to write a custom Skript that rotates the screen on my Convertible when the Lid is in the Tablet mode configuration. Acpi reads this state as :
Video/tabletmode TBLT 0000008A 00000000(Or 00000001 depending on orientation)
wmi pnp0C14:02 000000d0 00000000
wmi pnp0C14:00 000000b0 00000000
Is that enough to be easily accessed by a noscript?
I have a lenovo 7 2in1 with pop os 24.04
Has anyone any tips or Ideas?
https://redd.it/1qi7uab
@r_bash
Hey guys. I am completely new to bash programming, but i have a small annoyance with my new device, that i want to fix:
I want to write a custom Skript that rotates the screen on my Convertible when the Lid is in the Tablet mode configuration. Acpi reads this state as :
Video/tabletmode TBLT 0000008A 00000000(Or 00000001 depending on orientation)
wmi pnp0C14:02 000000d0 00000000
wmi pnp0C14:00 000000b0 00000000
Is that enough to be easily accessed by a noscript?
I have a lenovo 7 2in1 with pop os 24.04
Has anyone any tips or Ideas?
https://redd.it/1qi7uab
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Send binary file
Let me rephrase my question.
HOW DO I SEND A RAW BINARY FILE OVER THE NETWORK?
I don't need any commands that add headers or anything like that. I just have a binary file, and I want my network card to send it, that's all!
If you're wondering, the file already contains absolutely all the necessary headers for my router to understand it.
If you don't know, don't answer. Otherwise, thank you for your valuable help and answers.
https://redd.it/1qj69co
@r_bash
Let me rephrase my question.
HOW DO I SEND A RAW BINARY FILE OVER THE NETWORK?
I don't need any commands that add headers or anything like that. I just have a binary file, and I want my network card to send it, that's all!
If you're wondering, the file already contains absolutely all the necessary headers for my router to understand it.
If you don't know, don't answer. Otherwise, thank you for your valuable help and answers.
https://redd.it/1qj69co
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Serve a C
Hello, I created a mini server in local C on port 53; it's very simple.
It only works with UDP requests.
To test my server, I open a console window and run my program. I then open a second console window and run the command "nc -u IPOFMYLOCALSERVER 53" because my server is waiting on port 53 and displays the UDP request when it receives one.
To summarize:
I have a window where I launch my server.
A window where I run the command "nc -u IPOFMYLOCALSERVER 53".
And in the window where I launched the server, I expected to see the request displayed. But I never take it out again.
I think I'm doing it wrong, and that's why I'm asking for your help.
Thank you for your replies.
https://redd.it/1qk0o7g
@r_bash
Hello, I created a mini server in local C on port 53; it's very simple.
It only works with UDP requests.
To test my server, I open a console window and run my program. I then open a second console window and run the command "nc -u IPOFMYLOCALSERVER 53" because my server is waiting on port 53 and displays the UDP request when it receives one.
To summarize:
I have a window where I launch my server.
A window where I run the command "nc -u IPOFMYLOCALSERVER 53".
And in the window where I launched the server, I expected to see the request displayed. But I never take it out again.
I think I'm doing it wrong, and that's why I'm asking for your help.
Thank you for your replies.
https://redd.it/1qk0o7g
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Mastermind
Not another terminal game? Yes, well I don't have anything better to do. Anyway - hope some will find it of interest. It's just a simple Bash implementation of the old board game Mastermind.
https://github.com/StarShovel/bash-mastermind
https://preview.redd.it/blndr55g5yeg1.png?width=504&format=png&auto=webp&s=0464bdc495d45c838dbd46201e776bbb4740387e
https://preview.redd.it/l6yhqpjq5yeg1.jpg?width=653&format=pjpg&auto=webp&s=702fe9d8cbbff0c8a087119e54e4d39a5db34225
https://redd.it/1qk33x1
@r_bash
Not another terminal game? Yes, well I don't have anything better to do. Anyway - hope some will find it of interest. It's just a simple Bash implementation of the old board game Mastermind.
https://github.com/StarShovel/bash-mastermind
https://preview.redd.it/blndr55g5yeg1.png?width=504&format=png&auto=webp&s=0464bdc495d45c838dbd46201e776bbb4740387e
https://preview.redd.it/l6yhqpjq5yeg1.jpg?width=653&format=pjpg&auto=webp&s=702fe9d8cbbff0c8a087119e54e4d39a5db34225
https://redd.it/1qk33x1
@r_bash
GitHub
GitHub - StarShovel/bash-mastermind: A Bash implementation of the classic board game
A Bash implementation of the classic board game. Contribute to StarShovel/bash-mastermind development by creating an account on GitHub.
Hidden Gems: Little-Known Bash Features
https://slicker.me/bash/gems.html
https://redd.it/1qkfjls
@r_bash
https://slicker.me/bash/gems.html
https://redd.it/1qkfjls
@r_bash
slicker.me
Hidden Gems: Little-Known Bash Features
Curl Timing Confusion
I’m trying to figure out what I’ve done wrong with respect to limiting how much time curl takes to perform a single file upload.
Here’s the code I’m using.
`for i in {1..3}`
`do`
`echo $'\n'"\`date\`" Upload Attempt "$i" - $(hostname) >> "$log"`
`curl -s -S -v -u mgnewman: \`
`--connect-timeout 30 \`
`--max-time 30 \`
`--pubkey ~/.ssh/id_rsa.pub \`
`-T $file $host &>> $log`
`err=$?`
`echo $'\n'"\`date\`" Upload Ended "$err" - $(hostname) >> "$log"`
`touch /home/pi/webcam/webcam.webp`
`if [ $err -eq 0 ] ; then`
`break`
`fi`
`done`
Note that I’m using a “do loop” rather than curl’s retry option because between each iteration I want to touch an existing image file to prevent watchdog from rebooting the machine which it does if the image is not refreshed in ten minutes.
I’m trying to limit each iteration of curl to 30 seconds, but that doesn’t seem to work. Here’s a fragment of my log file:
Wed Jan 21 23:37:24 +07 2026 Upload Attempt 3 - raspcondo
\* Trying 192.nnn.nnn.101...
\* TCP\_NODELAY set
\* Connected to [xxxxxxx.com](http://xxxxxxx.com/) (192.nnn.nnn.101) port 22 (#0)
\* SSH MD5 fingerprint: 4b17cad500a405c850e118c1deec0f96
\* SSH host check: 0, key: AAAAB3NzaC1yc2EAAAADAQABAAABAQCzCyhhdYNOn5Zgib7qhPKev$
\* SSH authentication methods available: publickey,password,keyboard-interactive
\* Using SSH public key file '/home/pi/.ssh/id\_rsa.pub'
\* Using SSH private key file '/home/pi/.ssh/id\_rsa'
\* Initialized SSH public key authentication
\* Authentication complete
\* Operation timed out after 30000 milliseconds with 0 out of 0 bytes received
\* Closing connection 0
curl: (28) Operation timed out after 30000 milliseconds with 0 out of 0 bytes r$
Wed Jan 21 23:48:09 +07 2026 Upload Ended 28 - raspcondo
My conclusion is that I don’t understand how this works as it seems that around ten minutes elapsed between the time curl started (23:37:24) and the time it failed (23:48:09) with error 28.
Note that I realize the code is rather sloppy, but I’m just a hobbyist and that’s about the best I can do. Sorry.
https://redd.it/1qkjv1r
@r_bash
I’m trying to figure out what I’ve done wrong with respect to limiting how much time curl takes to perform a single file upload.
Here’s the code I’m using.
`for i in {1..3}`
`do`
`echo $'\n'"\`date\`" Upload Attempt "$i" - $(hostname) >> "$log"`
`curl -s -S -v -u mgnewman: \`
`--connect-timeout 30 \`
`--max-time 30 \`
`--pubkey ~/.ssh/id_rsa.pub \`
`-T $file $host &>> $log`
`err=$?`
`echo $'\n'"\`date\`" Upload Ended "$err" - $(hostname) >> "$log"`
`touch /home/pi/webcam/webcam.webp`
`if [ $err -eq 0 ] ; then`
`break`
`fi`
`done`
Note that I’m using a “do loop” rather than curl’s retry option because between each iteration I want to touch an existing image file to prevent watchdog from rebooting the machine which it does if the image is not refreshed in ten minutes.
I’m trying to limit each iteration of curl to 30 seconds, but that doesn’t seem to work. Here’s a fragment of my log file:
Wed Jan 21 23:37:24 +07 2026 Upload Attempt 3 - raspcondo
\* Trying 192.nnn.nnn.101...
\* TCP\_NODELAY set
\* Connected to [xxxxxxx.com](http://xxxxxxx.com/) (192.nnn.nnn.101) port 22 (#0)
\* SSH MD5 fingerprint: 4b17cad500a405c850e118c1deec0f96
\* SSH host check: 0, key: AAAAB3NzaC1yc2EAAAADAQABAAABAQCzCyhhdYNOn5Zgib7qhPKev$
\* SSH authentication methods available: publickey,password,keyboard-interactive
\* Using SSH public key file '/home/pi/.ssh/id\_rsa.pub'
\* Using SSH private key file '/home/pi/.ssh/id\_rsa'
\* Initialized SSH public key authentication
\* Authentication complete
\* Operation timed out after 30000 milliseconds with 0 out of 0 bytes received
\* Closing connection 0
curl: (28) Operation timed out after 30000 milliseconds with 0 out of 0 bytes r$
Wed Jan 21 23:48:09 +07 2026 Upload Ended 28 - raspcondo
My conclusion is that I don’t understand how this works as it seems that around ten minutes elapsed between the time curl started (23:37:24) and the time it failed (23:48:09) with error 28.
Note that I realize the code is rather sloppy, but I’m just a hobbyist and that’s about the best I can do. Sorry.
https://redd.it/1qkjv1r
@r_bash
Portable (Cartesian) brace expansion in your shell
https://neosmart.net/blog/portable-cartesian-brace-expansion-in-your-shell/
https://redd.it/1qkvy8v
@r_bash
https://neosmart.net/blog/portable-cartesian-brace-expansion-in-your-shell/
https://redd.it/1qkvy8v
@r_bash
The NeoSmart Files
Portable (Cartesian) brace expansion in your shell
Cartesian expansion, also known as brace expansion, is an incredibly powerful feature of most unixy shells, but despite being fundamentally simple and incredibly empowering, it’s been traditi…
Dear pros, as a newbie to bash noscripting, I wrote some functions to make my postgres life easier, anyone wanna review for best practices, conventions etc?
```
#!/usr/bin/env bash
# shellcheck source=/dev/null
source "${HOME}/Desktop/noscripts/logger.sh"
function run_createdb() {
if [[ -z "$(command -v createdb)" ]]; then
log_error "createdb command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_createdb <host> <port> <user> <database> [additional createdb flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a createdb_flags=(
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
createdb_flags+=("$@")
log_info "Executing createdb on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${createdb_flags[*]}"
if createdb "${createdb_flags[@]}" "${postgres_database}"; then
log_info "createdb command executed successfully"
return 0
else
log_error "createdb command execution failed"
return 1
fi
}
function run_createuser() {
if [[ -z "$(command -v createuser)" ]]; then
log_error "createuser command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_createuser <host> <port> <user> <superuser> [additional createuser flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_superuser="$4"
shift 4
local -a createuser_flags=(
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_superuser}"
)
createuser_flags+=("$@")
log_info "Executing createuser on host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_superuser} with flags: ${createuser_flags[*]}"
if createuser "${createuser_flags[@]}" "${postgres_user}"; then
log_info "createuser command executed successfully"
return 0
else
log_error "createuser command execution failed"
return 1
fi
}
function run_dropdb() {
if [[ -z "$(command -v dropdb)" ]]; then
log_error "dropdb command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_dropdb <host> <port> <user> <database> [additional dropdb flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a dropdb_flags=(
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
dropdb_flags+=("$@")
log_info "Executing dropdb on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${dropdb_flags[*]}"
if dropdb "${dropdb_flags[@]}" "${postgres_database}"; then
log_info "dropdb command executed successfully"
return 0
else
log_error "dropdb command execution failed"
return 1
fi
}
function run_pg_dump() {
if [[ -z "$(command -v pg_dump)" ]]; then
log_error "pg_dump command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_pg_dump <host> <port> <user> <database> [additional pg_dump flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a pg_dump_flags=(
"--dbname=${postgres_database}"
"--host=${postgres_host}"
"--port=${postgres_port}"
```
#!/usr/bin/env bash
# shellcheck source=/dev/null
source "${HOME}/Desktop/noscripts/logger.sh"
function run_createdb() {
if [[ -z "$(command -v createdb)" ]]; then
log_error "createdb command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_createdb <host> <port> <user> <database> [additional createdb flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a createdb_flags=(
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
createdb_flags+=("$@")
log_info "Executing createdb on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${createdb_flags[*]}"
if createdb "${createdb_flags[@]}" "${postgres_database}"; then
log_info "createdb command executed successfully"
return 0
else
log_error "createdb command execution failed"
return 1
fi
}
function run_createuser() {
if [[ -z "$(command -v createuser)" ]]; then
log_error "createuser command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_createuser <host> <port> <user> <superuser> [additional createuser flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_superuser="$4"
shift 4
local -a createuser_flags=(
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_superuser}"
)
createuser_flags+=("$@")
log_info "Executing createuser on host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_superuser} with flags: ${createuser_flags[*]}"
if createuser "${createuser_flags[@]}" "${postgres_user}"; then
log_info "createuser command executed successfully"
return 0
else
log_error "createuser command execution failed"
return 1
fi
}
function run_dropdb() {
if [[ -z "$(command -v dropdb)" ]]; then
log_error "dropdb command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_dropdb <host> <port> <user> <database> [additional dropdb flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a dropdb_flags=(
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
dropdb_flags+=("$@")
log_info "Executing dropdb on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${dropdb_flags[*]}"
if dropdb "${dropdb_flags[@]}" "${postgres_database}"; then
log_info "dropdb command executed successfully"
return 0
else
log_error "dropdb command execution failed"
return 1
fi
}
function run_pg_dump() {
if [[ -z "$(command -v pg_dump)" ]]; then
log_error "pg_dump command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_pg_dump <host> <port> <user> <database> [additional pg_dump flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a pg_dump_flags=(
"--dbname=${postgres_database}"
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
pg_dump_flags+=("$@")
log_info "Executing pg_dump on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${pg_dump_flags[*]}"
if pg_dump "${pg_dump_flags[@]}" "${postgres_database}"; then
log_info "pg_dump command executed successfully"
return 0
else
log_error "pg_dump command execution failed"
return 1
fi
}
function run_pg_restore() {
if [[ -z "$(command -v pg_restore)" ]]; then
log_error "pg_restore command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_pg_restore <host> <port> <user> <database> [additional pg_restore flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a pg_restore_flags=(
"--dbname=${postgres_database}"
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
pg_restore_flags+=("$@")
log_info "Executing pg_restore on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${pg_restore_flags[*]}"
if pg_restore "${pg_restore_flags[@]}" "${postgres_database}"; then
log_info "pg_restore command executed successfully"
return 0
else
log_error "pg_restore command execution failed"
return 1
fi
}
function run_psql() {
if [[ -z "$(command -v psql)" ]]; then
log_error "psql command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_psql <host> <port> <user> <database> [additional psql flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a psql_flags=(
"--dbname=${postgres_database}"
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
psql_flags+=("$@")
log_info "Executing psql on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${psql_flags[*]}"
if psql "${psql_flags[@]}"; then
log_info "psql command executed successfully"
return 0
else
log_error "psql command execution failed"
return 1
fi
}
```
https://redd.it/1qllq3g
@r_bash
)
pg_dump_flags+=("$@")
log_info "Executing pg_dump on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${pg_dump_flags[*]}"
if pg_dump "${pg_dump_flags[@]}" "${postgres_database}"; then
log_info "pg_dump command executed successfully"
return 0
else
log_error "pg_dump command execution failed"
return 1
fi
}
function run_pg_restore() {
if [[ -z "$(command -v pg_restore)" ]]; then
log_error "pg_restore command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_pg_restore <host> <port> <user> <database> [additional pg_restore flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a pg_restore_flags=(
"--dbname=${postgres_database}"
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
pg_restore_flags+=("$@")
log_info "Executing pg_restore on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${pg_restore_flags[*]}"
if pg_restore "${pg_restore_flags[@]}" "${postgres_database}"; then
log_info "pg_restore command executed successfully"
return 0
else
log_error "pg_restore command execution failed"
return 1
fi
}
function run_psql() {
if [[ -z "$(command -v psql)" ]]; then
log_error "psql command not found. Please ensure PostgreSQL client is installed."
return 1
fi
if [[ "$#" -lt 4 ]]; then
log_error "Usage: run_psql <host> <port> <user> <database> [additional psql flags]"
return 1
fi
local -r postgres_host="$1"
local -r postgres_port="$2"
local -r postgres_user="$3"
local -r postgres_database="$4"
shift 4
local -a psql_flags=(
"--dbname=${postgres_database}"
"--host=${postgres_host}"
"--port=${postgres_port}"
"--username=${postgres_user}"
)
psql_flags+=("$@")
log_info "Executing psql on database: ${postgres_database}, host: ${postgres_host}, port: ${postgres_port}, username: ${postgres_user} with flags: ${psql_flags[*]}"
if psql "${psql_flags[@]}"; then
log_info "psql command executed successfully"
return 0
else
log_error "psql command execution failed"
return 1
fi
}
```
https://redd.it/1qllq3g
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Bash Loging
#!/bin/bash
exec 19>/tmp/full_configer.log
export BASH_EXTRACEFD=19
will this send a copy of the output to the log file?
https://redd.it/1qlrtj6
@r_bash
#!/bin/bash
exec 19>/tmp/full_configer.log
export BASH_EXTRACEFD=19
will this send a copy of the output to the log file?
https://redd.it/1qlrtj6
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Most hidden "bug"?
Edit: Ok, maybe the post noscript is a bit pretentious, in hindsight even cringe (cannot edit it anymore). But the behavior is certainly weird!
I've found something truly weird, and maybe someone knowledgeable in bash's source code can help me understand this :D. If you run this command: `a(`, you will likely get ``bash: syntax error near unexpected token `newline'``. Now, run this command `<(`. It will hopefully ask for more input. Abort with Ctrl-C. Now run `a(` again. You will *from now on*, get a different error message! Namely: ``bash: syntax error near unexpected token `newline' while looking for matching `)'``.
Of course this is a niche thing that doesn't really matter, but I'm really interested in bash and maybe someone has a sound explanation for this, as it doesn't really make sense to me. It seems like bash turns a switch or something when you start but not finish a process substitution!
Here's an interactive session of what I mean:
$ a(
bash: syntax error near unexpected token `newline'
$ a((
bash: syntax error near unexpected token `('
$ <(
> ^C
$ a(
bash: syntax error near unexpected token `newline' while looking for matching `)'
$ a((
bash: syntax error near unexpected token `(' while looking for matching `)'
$ a(
bash: syntax error near unexpected token `newline' while looking for matching `)'
https://redd.it/1qly1ha
@r_bash
Edit: Ok, maybe the post noscript is a bit pretentious, in hindsight even cringe (cannot edit it anymore). But the behavior is certainly weird!
I've found something truly weird, and maybe someone knowledgeable in bash's source code can help me understand this :D. If you run this command: `a(`, you will likely get ``bash: syntax error near unexpected token `newline'``. Now, run this command `<(`. It will hopefully ask for more input. Abort with Ctrl-C. Now run `a(` again. You will *from now on*, get a different error message! Namely: ``bash: syntax error near unexpected token `newline' while looking for matching `)'``.
Of course this is a niche thing that doesn't really matter, but I'm really interested in bash and maybe someone has a sound explanation for this, as it doesn't really make sense to me. It seems like bash turns a switch or something when you start but not finish a process substitution!
Here's an interactive session of what I mean:
$ a(
bash: syntax error near unexpected token `newline'
$ a((
bash: syntax error near unexpected token `('
$ <(
> ^C
$ a(
bash: syntax error near unexpected token `newline' while looking for matching `)'
$ a((
bash: syntax error near unexpected token `(' while looking for matching `)'
$ a(
bash: syntax error near unexpected token `newline' while looking for matching `)'
https://redd.it/1qly1ha
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Are there any high leverage ways to get good ctrl r in a terminal?
I have to deal with a lot of minimal containers. Some, I straight up don't control (proprietary cloud simulations). Some I do control technically... but it's a PITA to maintain all my configs and integrate them with the container easily and reliably (especially if dependencies aren't installed on said machine), through version upgrades. Sometimes I just want to spin up a container just cuz.
For reference, another extremely high leverage option is vi mode:
I just copy this in the start of any minimal bash session (or even just set -o vi, but this is automatable with tmux) and I'm basically chilling.
Sure, fzf is great, but it depends on git being installed. I mean, not really a big deal, but still, a dependency (e.g. now you need internet access, remember the package manager for the OS, it needs to have git, etc.) Furthermore, I want to sort of push the limits of bash - are there any wizards that know a lot about obscure bash features that could hack something up that's "simple" (two stages: one is obviously just minimal characters, but any solution that you can just copy paste into a bash terminal in a single line, no matter how hackily, is good enough for me IMO)
Yes, I know normal ctrl r, no, I don't like it mainly because it doesn't show me multiple options at once. My memory is really bad LOL, but maybe I just get used to it (fzf is an actual gamechanger fr tho)
---
EDIT because I think i'm shadowbanned from my own post for some reason but:
the use case is when you spin up various interactive containers potentially hundreds of times a day, don't have control over the exact launch params (or more precisely, maintaining custom configs layered on top of the containers is either hacky as version upgrades happen, or it straight up is impossible like in secure proprietary cloud simulations) and don't want to deal with vanilla bash.
the challenge is to find a good balance
my config in general (if I were say, installing configs fully on a home computer I control) is already very minimal already, but this is going even further.
in general:
- mounting is forbidden in general (if I could mount, I'd just install my configs lol)
- internet is okay, but the point is no internet. yes I am aware git clone fzf + install, the point of the post is that we aren't going this route. take it or leave it lol. that's why I asked specifically on the r/bash subreddit, if there were any bash wizards who had custom ctrl R setups, curious
set -o vi, for example, is a setting on most containers that exists, requires no internet, and is high leverage for me (as someone who lives perma in the command line).
fzf is also very high leverage for me. but I'm saying, assume we aren't allowed to use fzf, what can we do
https://redd.it/1qqo2ce
@r_bash
I have to deal with a lot of minimal containers. Some, I straight up don't control (proprietary cloud simulations). Some I do control technically... but it's a PITA to maintain all my configs and integrate them with the container easily and reliably (especially if dependencies aren't installed on said machine), through version upgrades. Sometimes I just want to spin up a container just cuz.
For reference, another extremely high leverage option is vi mode:
set -o vi; bind 'set vi-ins-mode-string \1\e[6 q\2'; bind 'set vi-cmd-mode-string \1\e[2 q\2';
I just copy this in the start of any minimal bash session (or even just set -o vi, but this is automatable with tmux) and I'm basically chilling.
Sure, fzf is great, but it depends on git being installed. I mean, not really a big deal, but still, a dependency (e.g. now you need internet access, remember the package manager for the OS, it needs to have git, etc.) Furthermore, I want to sort of push the limits of bash - are there any wizards that know a lot about obscure bash features that could hack something up that's "simple" (two stages: one is obviously just minimal characters, but any solution that you can just copy paste into a bash terminal in a single line, no matter how hackily, is good enough for me IMO)
Yes, I know normal ctrl r, no, I don't like it mainly because it doesn't show me multiple options at once. My memory is really bad LOL, but maybe I just get used to it (fzf is an actual gamechanger fr tho)
---
EDIT because I think i'm shadowbanned from my own post for some reason but:
the use case is when you spin up various interactive containers potentially hundreds of times a day, don't have control over the exact launch params (or more precisely, maintaining custom configs layered on top of the containers is either hacky as version upgrades happen, or it straight up is impossible like in secure proprietary cloud simulations) and don't want to deal with vanilla bash.
the challenge is to find a good balance
my config in general (if I were say, installing configs fully on a home computer I control) is already very minimal already, but this is going even further.
in general:
- mounting is forbidden in general (if I could mount, I'd just install my configs lol)
- internet is okay, but the point is no internet. yes I am aware git clone fzf + install, the point of the post is that we aren't going this route. take it or leave it lol. that's why I asked specifically on the r/bash subreddit, if there were any bash wizards who had custom ctrl R setups, curious
set -o vi, for example, is a setting on most containers that exists, requires no internet, and is high leverage for me (as someone who lives perma in the command line).
fzf is also very high leverage for me. but I'm saying, assume we aren't allowed to use fzf, what can we do
https://redd.it/1qqo2ce
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Locked out of local admin account - need to recover Wi-Fi network details
Hi everyone,
I’ve found my old laptop running Windows 10/11, but I’ve completely forgotten the local administrator password. I can log in as a standard user, but I need admin rights to see the Wi-Fi password for the network I'm currently connected to (using the netsh wlan show profile command).
Since it’s a local account not linked to Microsoft, I’m looking for a way to reset the admin password or gain enough privileges to run CMD as admin without wiping my data. Are tools like Hiren’s BootCD or the "utilman" method still working on recent updates?
Thanks for any advice!
https://redd.it/1qqyc1c
@r_bash
Hi everyone,
I’ve found my old laptop running Windows 10/11, but I’ve completely forgotten the local administrator password. I can log in as a standard user, but I need admin rights to see the Wi-Fi password for the network I'm currently connected to (using the netsh wlan show profile command).
Since it’s a local account not linked to Microsoft, I’m looking for a way to reset the admin password or gain enough privileges to run CMD as admin without wiping my data. Are tools like Hiren’s BootCD or the "utilman" method still working on recent updates?
Thanks for any advice!
https://redd.it/1qqyc1c
@r_bash
Reddit
From the bash community on Reddit
Explore this post and more from the bash community
Tcl: The Most Underrated, But The Most Productive Programming Language (like Bash)
https://medium.com/gitconnected/tcl-the-most-underrated-but-the-most-productive-programming-language-1f83c99eaab7?sk=de732f41d473339dc31ee7481a8ba526
https://redd.it/1qqyq44
@r_bash
https://medium.com/gitconnected/tcl-the-most-underrated-but-the-most-productive-programming-language-1f83c99eaab7?sk=de732f41d473339dc31ee7481a8ba526
https://redd.it/1qqyq44
@r_bash
Medium
Tcl: The Most Underrated, But The Most Productive Programming Language
The only well-modernized command language that you can use literally for anything