r_bash – Telegram
syntax for hash comparisons. newbie help

what is the code/syntax to compare:

i have a string. i want to hash it and compare that hash to a hash stored in a file

something like:

if [ "string" | sha256sum -eq cat file.txt \] ; then

​

https://redd.it/153hs6y
@r_bash
To run this bash noscript inside a cron job every 4 hrs, what is the safest way to put your postgres password here?
https://redd.it/153xtfn
@r_bash
Login to remote machine, execute commands, save them in text file in source machine

Will try to make this as simple as possible, here is the scenario I need to achieve.

1. From a linux box login to another machine via SSH (this machine might not be linux based, at times is propriatery syntax)
2. Execute set of commands on the remote machine and save the output let's say from screen inside a text file on the original machine.

The way this is being done at the moment is using "expect", and sending the password in plain text inside the shell noscript.

As part of security improvements i am taking care of, the task is to make this remote login password less, no password shall be passed over the noscript in plain text.

​

Ideally this should be done using keys.

​

How would this be done by still retaining the expect noscript since i run "expect"/"send" commands to the remote machine.

​

I am also open to different ideas you might have, maybe from experience.

​

TIA

https://redd.it/153xwll
@r_bash
"head" command changes the output of another command visually in an unexpected way

Hi there! I wanna get list of all scenes from Blender 3D file (.blend), I've wrote this command:

blender -b test.blend --python-expr 'import bpy

for name in scene.name for scene in list(bpy.data.scenes):
print(name)'

For my .blend file it outputs the following text to stdout:

Color management: using fallback mode for management
Color management: Error could not find role data role.
Blender 3.0.1
Color management: scene view "Filmic" not found, setting default "Standard".
Read blend: /home/emilyseville7cfg/Documents/open-source/other/forks/fish-shell/test.blend
Scene
Scene.001

Blender quit

As I don't know how to get rid of all this garbage output (all except two scene names) I decided to use head/tail for this task. But when I just run head:

blender -b test.blend --python-expr 'import bpy

for name in scene.name for scene in list(bpy.data.scenes):
print(name)' | head --lines 100 # 100 is used as a test case

it's output confuses me:

Scene
Scene.001
Color management: using fallback mode for management
Color management: Error could not find role data role.
Blender 3.0.1
Color management: scene view "Filmic" not found, setting default "Standard".
Read blend: /home/emilyseville7cfg/Documents/open-source/other/forks/fish-shell/test.blend

Blender quit

So my question is: how it is possible that piping through modifies output visually while all data from blender is sent to just one stream stdout? I've checked > /dev/null discards any output here. I feel that I'm misunderstanding something. I don't think that it's a bug because the same thing reproduces in a Fish shell too and in Nushell, it's more likely I miss something.

https://redd.it/155clzz
@r_bash
Is it possible to have "select... do... done" timeout if no selection is made?

I need the following to continue with the rest of the noscript if a selection is not made within a pre-set time period. Or automatically select a default choice.

#!/usr/bin/env bash

PS3="Select your M.2 Card: "
options=("M2D20" "M2D18" "M2D17")
select choice in "${options@}"; do
case "$choice" in
M2D20)
card=m2d20
break
;;
M2D18)
card=m2d18
break
;;
M2D17)
card=m2d17
break
;;
esac
done

If that's not possible I can think of other solutions.

https://redd.it/155fpu7
@r_bash
Generic Bash Script Args - Starting Point?

I think having a good starting point is important. I think any noscript that needs to have args needs to take long and short as well as take them in any order.


Here's what I think that starting point looks like, are there any improvements I should think about?


#!/usr/bin/env bash
###################################################################
# Script Name : bash_getops_any_order_7.sh
# Version : 0.1
# Date :
# Denoscription :
# Args : -c <_copy-from_> -r <_creation_> -n <_var-num_> -s <_step_> [-h <_help_>]
# --copy-from <_copy-from_> --creation <_creation_> --var-num <_var-num_> --step <_step_> [--help]
# Author :
# Email :
# Documentation :
# Git / SVN :
# Jira :
# Copyright :
###################################################################
## shellcheck
#
# TODO:

# make sure we have decent error handling for bash noscripts
set -o errexit -o noglob -o nounset -o pipefail

###################################################################
#### Test all Dependancies
_SCRIPTNM="${0##*/}"

function _printf_yel () {
printf "\e[33m%-6s\e[m %s\n" "${@}"
}

function _printf_yel_n () {
printf "\e[33m%-6s\e[m %s" "${@}"
}

function _printf_red () {
printf "\e[91m%b\e[0m %s\n" "${@}"
}

_SET_EXIT=0
for _DEPEN in grep git awk vim rm ; do
hash "${_DEPEN}" >/dev/null 2>&1 || {
_SET_EXIT=1
} ; done
if [[ "${_SET_EXIT}" -eq "1" ]]; then
echo " CRIT: ERROR Script" "${_SCRIPTNM}" "is Missing Dependancies"
echo "Missing - please install any required packages for the following dependencies"
_printf_yel "${_DEPEN}"
exit 1
fi
###################################################################
#### Test bash version as macos ships with somethng from 1800!
if [[ -z "${BASH_VERSION}" ]]; then
echo "Can't find bash version _ Bash v4+ is a requirement"
exit 1
else
if [[ ! "${BASH_VERSION:0:1}" -gt "3" ]]; then
echo "current version = ${BASH_VERSION} required version = 4.+"
echo "Bash version is too low - please use a newer version for this noscript"
exit 1
fi
fi
###################################################################

function _usage () {
echo "Usage: $(basename "$0") -c <_copy-from_> -r <_creation_> -n <_var-num_> -s <_step_> [-h <_help_>"] >&2
echo "or"
echo "Usage: $(basename "$0") --copy-from <_copy-from_> --creation <_creation_> --var-num <_var-num_> --step <_step_> [--help]" >&2
exit 0
}

_VERSION="0.1"
_date=$( date +'%d %b %Y %H:%M:%S' )

#### Parse options and arguments with getopt
if ! args=$( getopt --options c:r:n:s:h --longoptions copy-from:,creation:,var-num:,step:,help -- "$@" ); then
echo "Error: Failed to parse options and arguments." >&2
exit 1
fi

#### Initialize variables with default values
copyfrom=""
creation=""
varnum=""
step=""

# Process options and arguments
eval set -- "${args}"
while [[ "${#}" -gt 0 ]]; do
case "$1" in
-c|--copy-from)
copyfrom="${2}"
shift 2
;;
-r|--creation)
creation="${2}"
shift 2
;;
-n|--var-num)
varnum="${2}"
shift 2
;;
-s|--step)
step="${2}"
shift 2
;;
-h|--help)
_usage
;;
--)
shift
break
;;
*)
echo "Error: Invalid option or argument: " "${1}" >&2
_usage
exit 1
;;
esac
done

#### Check if all required options are provided
if [[ -z "${copyfrom}" || -z "${creation}" || -z "${varnum}" || -z "${step}"
]]; then
_usage
exit 1
fi

#### Print the parsed options
echo "copy-from=$copyfrom, creation=$creation, var-num=$varnum, step=$step"

&#x200B;

https://redd.it/155magg
@r_bash
Adding a leading zero to a variable in a loop.

I'm writing a noscript that renames every video file in a directory with a shorter, clearer name. The intention is to name every one "S01E01.showname.ext", "S01E02.showname.ext" etc.

Incrementing a variable is easy, the problem is it's dropping the leading zero. So while S01E01 is fine, the next file becomes S01E2. Awful!

I tried to append a zero to any number less than 10:

function loop {

for video in *.$filetype
do if (($episodenumber < 10))
then $episodenumber=0${episodenumber}
fi
echo -e "debug filename: S${seasonnumber}E${episodenumber}_${showname}.${filetype}"
episodenumber=$((episodenumber+1))
done
}

But it doesn't work, giving this error from files 1 to 9:

./bulk_renamer.sh: line 24: 1=0{1}: command not found

I don't understand what it's doing here, because if I do this at bash shell

testver=1
testver=0${testver}
echo $testver

that returns "01".

What's going wrong?

https://redd.it/155o9xt
@r_bash
Help with optional arguments

I am trying to write a noscript that has several options, some with arguments some without, but I am completely stuck on the implementation of an optional argument.

An example run shows "./program.sh -w30 -c Message" working, where:-w30 sets the width to 30-c sets the special character to the default of "*" but optionally could be set with something like -c'X'and "Message" sets the pages text to Message

Everything I have tried sets -c to the value Message, and I am at my wits end trying to make this work.

Here is my function for handling options:

printhelp() {foo}

# Parse command line options
function check
options() {
while getopts ":hw:p:nc:" options

do

case "$option" in

h|--help) # Display help
printhelp
;;
\?) # Check for invalid option
echo "Error: Invalid option -
$OPTARG"
print
help
;;
w) # Set width
width="$OPTARG"
;;
p) # Set padding
padding="$OPTARG"
;;
n) # Display without border
onlytext=true
;;
c) # Use special character

;;
: ) # Missing arg for -w/-p
if [ "
$OPTARG" != "c" ]; then
print
help
fi
;;
esac

done
}

&#x200B;

https://redd.it/1568niu
@r_bash
Curious thing happening... workaround found, but what is happening here?

I am adding an IP address to azure NSG sourceAddressPrefixes. az wants a string like [1.2.3.4,1.2.3.5\] with no spaces in it. Here's my output:

Space in between test, echoing string is literal

pj@eth:~$ test="[`1.2.3.4`, `1.2.3.5`]"

pj@eth:~$ echo $test

[`1.2.3.4`, `1.2.3.5`]

&#x200B;

No spaces in test, something is being interpretted when test is echo'd.

&#x200B;

pj@eth:~$ test="[1`.2.3.4`,`1.2.3.5`]"

pj@eth:~$ echo ${test}

1

Battled with this for a while yesterday.

I need this string to be literal and to not have any spaces in it. It's for azure cli nsg which fails when there are spaces.

When I remove the space in between the comma and the 2nd IP address value, the value of test becomes 1. I ended up removing the brackets which seems to stop whatever interpretation is happening, and then adding them back later , wrapping them around the string. But I had never seen this before so I am curious what it is doing. I imagine there's a better way to handle it.

https://redd.it/156ka4q
@r_bash
Trying to use an argument as a path

i want to make a function to paste into a file
so ideally id like it to be

function ptf {
xclip -se c -o > $1
}

but obviously that doesn't work
gives me an error about redirecting to a string

https://redd.it/156oixz
@r_bash
newbie - accessing sub folder files from noscript

from a noscript i need to call "file.txt" in subfolder "sub"

i can't figure the syntax out:

if [[ "$(<sub/file.txt)" ...

https://redd.it/15731x8
@r_bash
Any insights on starting Enterprise level bash noscripting? Good resources to level up my skills?



https://redd.it/157dtrz
@r_bash
echo result issue

my noscript has:

x='echo "1+2" | bc'

echo $x

but it's just displaying the string x not the result 3?

https://redd.it/158surm
@r_bash
What is wrong with this noscript?



#

Can someone tell me what is wrong with the below bash noscript? When I run the noscript, I only get one result: https://www.google.com | hakrawler. When I run the command (echo https://www.google.com | hakrawler) in the Kali terminal I get hundreds of results. Thank you.

\#!/bin/bash

\# Define the URL to crawl

url="https://www.google.com"

\# Get the domain name from the URL

domain=$(echo "$url" | sed -e 's#\^https://www.##' -e 's#/$##')

\# Generate the folder path on the desktop

output_folder="$HOME/Desktop/${domain}"

\# Create the folder if it doesn't exist

mkdir -p "$output_folder"

\# Generate the output file name with domain and date

output_file="${output_folder}/${domain}_$(date +"%Y%m%d").txt"

\# Define the command to run

command_to_run="echo $url | hakrawler"

\# Run the command and save the output to the generated file

$command_to_run > "$output_file"

\# Check for and remove duplicates in the output file

if [ -f "$output_file" \]; then

sorted_file="${output_file}.sorted"

sort "$output_file" | uniq > "$sorted_file"

mv "$sorted_file" "$output_file"

fi

echo "Hakrawler output saved to $output_file"

https://redd.it/158ubfq
@r_bash