r_bash | Unsorted

Telegram-канал r_bash - r_bash

36

Credits: @r_channels & @reddit2telegram

Subscribe to a channel

r_bash

What is these read command doing? Not understanding the encsig and enckey lines

Struggling to understand how the license key variable is being parsed by this code.

​

# Prompt for license key
echo -ne "Please enter a license key: "
read signedlicensekey

# Parse the license key
read -r signingdata encsig <<<$(echo "$signedlicensekey" | tr "." " ")
read -r signingprefix enckey <<<$(echo "$signingdata" | tr "/" " ")

From my understanding its license, then taking that data and to change any periods found into spaces. This then sets a new variable with the format modified to remove "." characters and saves it as signing\
data.


What is "enc_sig" doing? also the next line for enc_key? Doesn't appear to be setting that as a viarable as I print it and nothing appears. Thanks!

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

Читать полностью…

r_bash

Please critique my work

Hello

I wrote this script in 5 days and I am finally happy with it. It does everything I want. This is the first time I have used functions() in a bash script. I would like if you guys could rate it and give some suggestions. Please be direct and harsh. What could have I done better, what is unnecessary and so on...

Yes I know #!/bin/env (insert any interpreter) exists. I dont want/need it.

Yes I know [shellcheck.net](https://shellcheck.net) exists and I have used it.

Yes I have used chatgpt/gemini/bard for some help.

Yes I have used shfmt -s.

So the script is actually only for polybar. It will display a music status bar with current playback time, duration, artist and title. If title is too long, it will make the text slide from right to left. I also had to differ between Firefox and other players because Firefox sadly doesn't support the MPRIS API fully.

Below is my bash script, or if you like pastebin more -> [Pastebin Bash Script](https://pastebin.com/Vc5vJgc4)

#!/bin/bash

###################################################################
#Script Name :music_bar
#Description :polybar module for displaying music bar
#Args :
#Author :unixsilk
#Email :
###################################################################

function check_if_something_plays() {

no_player=$(playerctl status 2>&1)
if [ "${no_player}" == "No players found" ]; then
exit # Exit the entire script without any further output
fi

}

check_if_something_plays

find_playing_player() {

for each_player in $(playerctl -l); do
status=$(playerctl -p "${each_player}" status)
if [ "${status}" == "Playing" ]; then
player="${each_player}"
break
else
exit
fi
done

}

find_string_length() {

grab_artist=$(playerctl -p "${player}" metadata artist)
grab_title=$(playerctl -p "${player}" metadata title)

combined_length=$((${#grab_artist} + ${#grab_title}))

if [[ ${combined_length} -ge 55 ]]; then
length="greater"
else
length="lesser"
fi

}

function set_timestamps() {

current_duration=$(playerctl -p "${player}" metadata --format '{{duration(position)}}')
total_duration=$(playerctl -p "${player}" metadata --format '{{duration(mpris:length)}}')

}

function print_firefox_bar_moving() {

title_string_length=${#grab_title}

counter=0

for ((each = 0; each <= title_string_length; each++)); do
echo -e "${begin_white}""" "${grab_artist:0:15}" "•" "${end_color}""${grab_title:counter:55}"
((counter++))
sleep 0.19
done

}

function print_firefox_bar_static() {
echo "${begin_white}""" "${grab_artist}" "•" "${end_color}""${grab_title}"

}

function print_other_player_bar_moving() {

title_string_length=${#grab_title}

counter=0

for ((each = 0; each <= title_string_length; each++)); do
set_timestamps
echo -e "${begin_yellow}""${current_duration}""/""${total_duration}" "${begin_white}""" "${grab_artist:0:15}" "•" "${end_color}""${grab_title:counter:40}"
((counter++))
sleep 0.19
done
}

function print_other_player_bar_static() {

echo -e "${begin_yellow}""${current_duration}""/""${total_duration}" "${end_color}""${begin_white}""" "${grab_artist:0:9}" "•" "${end_color}""${grab_title}"

}

function define_colors() {

begin_yellow="%{F#F0C674}"
begin_white="%{F#FFFFFF}"
end_color="%{F-}"
}

#Find which player is playing currently and define that as variable $player
find_playing_player

#find the string length of title and artist
find_string_length

#invoke ANSI colors for Polybar
define_colors

combine_values="${player}-${length}"

case "${combine_values}" in
firefox*-greater)

Читать полностью…

r_bash

How would you implement "deleting duplicate files" in a CLI file de-duplication tool?

This is more a request for what concepts/ideas might work than for specific technical assistance, but if you know of any tools that might make some aspect much easier do suggest it.

***

### dupefind

Im currently working on a [tool called dupefind to find duplicate files and de-duplicate them](https://github.com/jkool702/forkrun/blob/dupefind/dupefind.bash). It is being designed explicitly to heavily utilize my [forkrun](https://github.com/jkool702/forkrun/blob/dupefind/forkrun.bash) utility.

So far I have the "finding duplicate files" part up and running and Im fairly happy with it (see bottom of post for more info). But, Im trying to figure out a good set of methods for choosing which duplicate(s) to keep that would work in a terminal (no GUI) and could handle 10 or 1,000 or 100,000 sets of duplicates.

***

### current plan

Currently, Im thinking more-or-less the following feature set. Am I missing any really useful features? Do any of these seem not useful / more trouble than they're worth?

global options:

* option to re-link deleted duplicates to the one duplicate that was kept (so that all the duplicate files still exist, but all except 1 are hard/soft-links)
* option to remove dirs that had all their contents deleted and are now empty
* option to save a duplicate file list and the ability to later resume from that duplicate list without needing to rescan the system for duplicates
* number of duplicates to keep (call it `N`)

modes of operation:

* manual: go 1 set of duplicates at a time, have them interactively select which
one(s) to keep via `read` or `select`
* automatic (with final manual confirmation): set up a heirarchical decision tree classification system based. (see below for details)

Does this seem reasonable and feasible and diverse enough to be useful for most de-duplicating situations? Any major features other de-duplicators have that I missed?

NOTE: In the future I might add "fuzzy matching" specialty modes for things like pictures and music, but for the moment Im just focusing on exact duplicates.

Thanks in advance for your feedback!

***

### heirarchical decision tree classification system

The idea is you could define certain aspects such as

* glob-enabled name/path (or not name/path)
* file age
* length of name (basename or full path)
* owner (user/group)

and then list them in a priority list to automatically figure out which duplicates to keep. For example, the idea is that the user would (probably in a config file) define something like

# priority to keep (highest on top, lowest on bottom)
path=/home/"$USER"/*
path!=/tmp/* && path!=/run
owner=$USER
age=newest
length_name=shortest

Then for each duplicate group, to figure out which `N` duplicates to keep, it would:

check how many were under `/home/$USER`. say there were `M`.

* if `M=N`: we are done, keep those `M`.
* if `M>N`: it would take those `M` and check them for the next lower priority on the list, looking for which `N` to keep
* if `M<N`: Those M would be kept (if M=0 none are kept yet), and the remaining would be checked for the next lower priority for which `N-M` to keep.

And this decision tree repeats at each priority level until you find your N duplicates or you finish with the last/lowest priority level defined.

***

### duplicate file finding code

The duplicate file finding code uses a 2-pass approach - first finding files that have the same size (as listed by `du`) and then computing the `sha1sum` of all the files with non-unique size and then lists any files with the same size *and* the same `sha1sum`.

for performance: on my system's main drive there is in total about 63 GB of data split between around 1.7 million files. There are around 600,000 duplicates, probably 90% of which are due to a backup copy of the entirety of `/usr` that is floating around for....reasons. `dupefind` generated a grouped list of duplicate files for the entire system in roughly 2 minutes and 10 seconds. This is about

Читать полностью…

r_bash

Little trick to make tar silently use multithreaded compressors in interactive sessions

Install some MT compressors (package names as in ubuntu):

* bzip2: lbzip2
* gz: pigz
* lz: plzip
* xz: pixz
* zstd: zstd

Create `~/.local/bin.tar`. In the dir, symlink regular tools to MT ones:

cd ~/.local/bin.tar
ln -s /usr/bin/lbzip2 bzip2
ln -s /usr/bin/pigz gzip
ln -s /usr/bin/lzip.plzip lzip
ln -s /usr/bin/pixz xz
ln -s /usr/bin/zstdmt zstd

Add into your bash aliases:

alias tar='PATH=~/.local/bin.tar:$PATH tar'

Thats all!

**Pro tip**: tar is [aware](https://git.savannah.gnu.org/cgit/tar.git/tree/src/buffer.c#n330) of lbzip2 and uses it by default if regular bzip2 is not installed.

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

Читать полностью…

r_bash

$PATH question...

In my .bashrc I've got several lines like the following:

export PATH="path/to/whatever:$PATH"

My question: Instead of starting each of those lines with export, if I just did:

PATH="this/path:$PATH
PATH="that/path:$PATH
export PATH

Is that basically the same thing?

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

Читать полностью…

r_bash

Confusion with Authentication header

It's told here that:

>For "Basic" authentication the credentials are constructed by first combining the username and the password with a colon (aladdin:opensesame), and then by encoding the resulting string in base64 (YWxhZGRpbjpvcGVuc2VzYW1l).

I created a request here to get all my gists, it looks like this: http -a ':<GitHub classic PAT>' GET `https://api.github.com/gists` 'Accept:application/vnd.github+json' X-GitHub-Api-Version:2022-11-28. For curl I got this code: curl --request GET --url https://api.github.com/gists --header 'Accept: application/vnd.github+json' --header 'Authorization: Basic <encrypted credentials>' --header 'X-GitHub-Api-Version: 2022-11-28'

I tried to do echo <GitHub classic PAT> | base64 to check whether it is equal to <encrypted credentials> but they didn't. What am I missing? Why I got different result from <encrypted credentials> after applying base64 to the original PAT?

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

Читать полностью…

r_bash

                         _omb_prompt_underline_navy                   Pictures/                                    Videos/
echo_background_cyan                         KONSOLE_DBUS_SERVICE                         _omb_prompt_underline_olive                  PIPESTATUS                                   VIRTUALENV_THEME_PROMPT_PREFIX
echo_background_green                        KONSOLE_DBUS_SESSION                         _omb_prompt_underline_purple                 .pki/                                        VIRTUALENV_THEME_PROMPT_SUFFIX
echo_background_orange                       KONSOLE_DBUS_WINDOW                          _omb_prompt_underline_red                    PLASMA_USE_QT_SCALING                        virtuoso/
echo_background_purple                       KONSOLE_VERSION                              _omb_prompt_underline_silver                 plugins                                      .vscode/
echo_background_red                          LANG                                         _omb_prompt_underline_teal                   POST_1_7_2_GIT                               WAYLAND_DISPLAY
echo_background_white                        LANGUAGE                                     _omb_prompt_underline_white                  PPID                                         white
echo_background_yellow                       LC_CTYPE                                     _omb_prompt_underline_yellow                 PREVIEW                                      WINDOWID
echo_black                                   LESS                                         OMB_PROMPT_VIRTUALENV_FORMAT                 PROFILEHOME                                  .wine/
echo_blue                                    LESSCLOSE                                    _omb_prompt_white                            Projects/                                    XAUTHORITY
echo_bold_black                              LESSOPEN                                     _omb_prompt_yellow                           PROMPT_COMMAND                               XCURSOR_SIZE
echo_bold_blue                               .librewolf/                                  _omb_spectrum_bg                             PROMPT_DIRTRIM                               XCURSOR_THEME
echo_bold_cyan                               LINENO                                       _omb_spectrum_fg                             PS1                                          XDG_ACTIVATION_TOKEN
echo_bold_green                              LINES                                        _omb_spectrum_fx                             PS2                                          XDG_CONFIG_DIRS
echo_bold_orange                             .local/                                      _omb_term_background_black                   PS4                                          XDG_CURRENT_DESKTOP
echo_bold_purple                             LOGNAME                                      _omb_term_background_blue                    Public/                                      XDG_DATA_DIRS
echo_bold_red                                LS_COLORS                                    _omb_term_background_brown                   purple                                       XDG_RUNTIME_DIR
echo_bold_white                              LSCOLORS                                     _omb_term_background_cyan                    PWD                                          XDG_SEAT
echo_bold_yellow                             MACHTYPE                                     _omb_term_background_gray                    PYTHON_THEME_PROMPT_PREFIX                   XDG_SEAT_PATH
echo_cyan                                    MAILCHECK                                    _omb_term_background_green                   PYTHON_THEME_PROMPT_SUFFIX                   XDG_SESSION_CLASS
echo_green                                   MANAGERPID                                   _omb_term_background_lime                    QSYS_ROOTDIR

Читать полностью…

r_bash

                                       __git_printf_supports_v                      _omb_prompt_blue                             _omb_term_underline_brown                    SCM_THEME_TAG_PREFIX
blue                                         __git_push_recurse_submodules                _omb_prompt_bold                             _omb_term_underline_cyan                     SDIRS
bold                                         __git_quoted_cr                              _omb_prompt_bold_black                       _omb_term_underline_gray                     SECONDS
bold_black                                   __git_rebase_inprogress_options              _omb_prompt_bold_blue                        _omb_term_underline_green                    SESSION_MANAGER
bold_blue                                    __git_rebase_interactive_inprogress_options  _omb_prompt_bold_brown                       _omb_term_underline_lime                     SHELL
bold_cyan                                    __git_ref_fieldlist                          _omb_prompt_bold_cyan                        _omb_term_underline_magenta                  SHELLOPTS
bold_green                                   __git_revert_inprogress_options              _omb_prompt_bold_gray                        _omb_term_underline_navy                     SHELL_SESSION_ID
bold_orange                                  __git_send_email_confirm_options             _omb_prompt_bold_green                       _omb_term_underline_olive                    SHLVL
bold_purple                                  __git_send_email_suppresscc_options          _omb_prompt_bold_lime                        _omb_term_underline_purple                   SHORT_HOST
bold_red                                     __git_sequencer_inprogress_options           _omb_prompt_bold_magenta                     _omb_term_underline_red                      SRANDOM
bold_white                                   __git_showcurrentpatch                       _omb_prompt_bold_navy                        _omb_term_underline_silver                   .ssh/
bold_yellow                                  __git_untracked_file_modes                   _omb_prompt_bold_olive                       _omb_term_underline_teal                     SSH_AGENT_LAUNCHER
.byobu/                                      __git_whitespacelist                         _omb_prompt_bold_purple                      _omb_term_underline_violet                   SSH_AUTH_SOCK
.cache/                                      __git_ws_error_highlight_opts                _omb_prompt_bold_red                         _omb_term_underline_white                    .steam/
CDPATH                                       GLOBIGNORE                                   _omb_prompt_bold_silver                      _omb_term_underline_yellow                   SYSTEMD_EXEC_PID
CHRUBY_THEME_PROMPT_PREFIX                   .gnome/                                      _omb_prompt_bold_teal                        _omb_term_violet                             tan
CHRUBY_THEME_PROMPT_SUFFIX                   .gnupg/                                      _omb_prompt_bold_white                       _omb_term_white                              Templates/
CLOCK_CHAR_THEME_PROMPT_PREFIX               .gradle/                                     _omb_prompt_bold_yellow                      _omb_term_yellow                             TERM
CLOCK_CHAR_THEME_PROMPT_SUFFIX               green                                        _omb_prompt_brown                            OMB_USE_SUDO                                 THEME_BATTERY_PERCENTAGE_CHECK
CLOCK_THEME_PROMPT_PREFIX                    GROUPS                                       _omb_prompt_cyan                             _omb_util_original_PS1                       THEME_CLOCK_COLOR
CLOCK_THEME_PROMPT_SUFFIX                    GTK2_RC_FILES                                _omb_prompt_gray                             _omb_util_prompt_command

Читать полностью…

r_bash

Help with ohmybash

After I installed oh my bash, I used some themes like agnoster for my bash and i started to code, but when I used command cd and pressed tab it said there's about 552 possiblities and there was at most 76 directories in my home directory including dotfiles .

this is the output after pressing tab key after cd

Display all 552 possibilities? (y or n)
_                                            echo_underline_red                           _NC                                          _omb_term_blue                               reset
aliases                                      echo_underline_white                         ncolors                                      _omb_term_bold                               reset_color
.android/                                    echo_underline_yellow                        normal                                       _omb_term_bold_black                         ret_status
Android/                                     echo_white                                   .oh-my-bash/                                 _omb_term_bold_blue                          RVM_THEME_PROMPT_PREFIX
AndroidStudioProjects/                       echo_yellow                                  OLDPWD                                       _omb_term_bold_brown                         RVM_THEME_PROMPT_SUFFIX
Applications/                                EPOCHREALTIME                                _omb_bash_version                            _omb_term_bold_cyan                          SCM_CHECK
Arduino/                                     EPOCHSECONDS                                 _omb_cd_dirstack                             _omb_term_bold_gray                          SCM_GIT
.arduino15/                                  EUID                                         _omb_deprecate_blue                          _omb_term_bold_green                         SCM_GIT_AHEAD_CHAR
.arduinoIDE/                                 FG                                           _omb_deprecate_const                         _omb_term_bold_lime                          SCM_GIT_BEHIND_CHAR
background_black                             .fltk/                                       _omb_deprecate_const_counter                 _omb_term_bold_magenta                       SCM_GIT_CHAR
background_blue                              FX                                           _omb_deprecate_const_value                   _omb_term_bold_navy                          SCM_GIT_DETACHED_CHAR
background_cyan                              Games/                                       _omb_deprecate_declare                       _omb_term_bold_olive                         SCM_GIT_DISABLE_UNTRACKED_DIRTY
background_green                             Git/                                         _omb_deprecate_declare_counter               _omb_term_bold_purple                        SCM_GIT_IGNORE_UNTRACKED
background_orange                            __git_all_commands                           _omb_deprecate_green                         _omb_term_bold_red                           SCM_GIT_SHOW_CURRENT_USER
background_purple                            __git_am_inprogress_options                  _omb_deprecate_magenta                       _omb_term_bold_silver                        SCM_GIT_SHOW_DETAILS
background_red                               __git_cherry_pick_inprogress_options         _omb_deprecate_msg_please_use                _omb_term_bold_teal                          SCM_GIT_SHOW_MINIMAL_INFO
background_white                             __git_cmds_with_parseopt_helper              _omb_deprecate_red                           _omb_term_bold_violet                        SCM_GIT_SHOW_REMOTE_INFO
background_yellow                            __git_color_moved_opts                       _omb_deprecate_yellow                        _omb_term_bold_white                         SCM_GIT_STAGED_CHAR
_backup_glob

Читать полностью…

r_bash

Pushd seems neglected

About half of all Bash users I talk to seems to know about pushd, but I know no one besides me who daily drives it. I guess the defaults are not the easiest thing to get used to, but with a few aliases (e.g. https://github.com/agvxov/cd\_rc.git) it seems a plain upgrade to regular cd-ing.

&#x200B;

So, do you use it? Why/why not?

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

Читать полностью…

r_bash

how can i turn this 5 lines code into 4?(and i dont want to use && or ; ...

grep "Montréal" lundi | cut -d',' -f1,4 | sort > montreal_preferences
grep "banane" lundi | cut -d',' -f1,4 | sort > banane_preferences
cut -d',' -f1,3 mardi | sort > temperature_preferences
join -t',' -1 1 -2 1 montreal_preferences temperature_preferences | sort | grep ",chaud" | wc -l join -t',' -1 1 -2 1 banane_preferences temperature_preferences | sort | grep -v ",chaud" | wc -l

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

Читать полностью…

r_bash

Command working diffent in the shell than inside script.

Hello.

This command give to me my current public IP:

curl checkip.amazonaws.com

MyPublicIp

But if I try to use the same command inside a script or with a extra tool like awk in the command line, I get this extra output:

curl checkip.amazonaws.com | awk -F . '{print $1}'

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 15 100 15 0 0 110 0 --:--:-- --:--:-- --:--:-- 111

200

But I don't know how to get rid of that extra output, any ideas I will appreciated people, thanks!!!

&#x200B;

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

Читать полностью…

r_bash

bash automatic completion question: is there a way to programatically determine (from inside a script/function) what the completions would have been for some commandline?

Title mostly sums it up - id like to be able to figure out what completions would have been suggested for some (partial) command line had you typed it and hit tab twice, but from inside a (non-interactive) script/function.

I know you can get the completion that was used with a given command via `complete -p ${command}`, but I cant seem to figure out how to feed that a command line programatically and trigger having it give completions.

***

My use case is I am adding completions to my [forkrun](https://github.com/jkool702/forkrun/blob/main/forkrun/bash) utility. `forkrun` is fundamentally a function that runs other commands for you (in parallel), and so its commandline is structured

forkrun [<forkrun_options>] [--] <command> [<command_options>]

I have [autocompletion working for the `<forkrun options>` and for the `<command>` itself](https://github.com/jkool702/forkrun/blob/forkrun_autocompletion/forkrun.bash#L928), but for any remaining `<command_options>` I would like to generate the same completions as what would have been generated if someone had typed

<command> [<command_options>]

with a partially typed last option directly into the terminal and then hit tab twice.

Thanks in advance.

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

Читать полностью…

r_bash

Multiple bash versions

I am working with a code. My Visual Studio Code has bash version 5 but when I run it, it runs with version 3. Even when I check from direct terminal, it says version 3. How to make it run with version 5 always?

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

Читать полностью…

r_bash

I had some questions about setting up bash auto-completions (when you hit <TAB> twice) for a complicated shell function

Im trying to figure out how to set up auto-completions (where it will auto-complete on `<TAB>` if it can or bring up a list of possible completions on a 2nd `<TAB>`) for my [forkrun](https://github.com/jkool702/forkrun) utility, which runs code in parallel with syntax much like `xargs -P`.

Ive never worked with autocompletion nor readline, and while I think I could get something working for a fairly simple function I suspect that getting `forkrun'`'s auto-completion how Id like it is going to take some advanced bash auto-complete magic. There are 2 aspects that make setting up auto-completion for forkrun tricky:

***

TRICKY BIT #1: it requires options to be in the same general format as `xargs` where you have:


... | forkrun [forkrun_options] [--] command [command_options]

# NOTE: everything in `[...]` is optional

**Ideally, I would like it to:**

1. initially auto-complete forkrun options, then
2. for the first option that doesnt start with a `-` or `+` OR the option immediately after a '--' (whichever comes first) have it auto-complete commands, and then
3. for all remaining options do auto-completions for that command (should they be available)

***

TRICKY BIT #2: `forkrun` uses a limited degree or "fuzzy" option matching. Options are identified using a `while-->case` loop with extglob-based case conditions. In practice, this basically means that each hoption has several aliases. Currently, options passed to forkrun trigger 1 of 39 different possible (unique) code paths, but there are ~400 possible different inputs that can trigger them (i.e., on average each unique option codepath has ~10 aliases).

See [forkrun.bash - lines 40-210](https://github.com/jkool702/forkrun/blob/main/forkrun.bash#L40) for the specific extglob matching criteria, but *most* of the possible matches are shown in the below `echo` command. Each line corresponds to all the possible aliases for a single option.

**Ideally, I would want the auto-completion to only offer up 1 possible auto-completion from each option (whatever is the shortest completoin based on what is already typed)**.

For example, if someone types `forkrun -pip` and hits tab I want it to auto-complete to `-pipe`, not to show `-pipe` `-piperead` and `-pipe-read` as possible completions, since all those completions are aliases and they all trigger the exact same codepath

***

# options with arguments are accepted with either 1 or 2 leading dash ('-') characters. arguments can be passed as '-opt <arg>' or '-opt=arg'
# options without arguments (excluding the ones for displaying help) are accepted with either 1 or 2 leading dash ('-') and/or plus ('+') characters
# this applies to both the short (single-letter) and long option types. i.e., { '-o' '--opt' '--o' '-opt' } all work

# option takes an argument that can be passed via either:
# '-opt <arg>'' (2 inputs) --OR-- '--opt=<arg>' (1 input)
# the <arg> doesnt need to be auto-completed, but the option flag before it does.
echo -{,-}{j,P,nprocs}{,=} \
-{,-}{t,tmp,tmpdir}{,=} \
-{,-}l{,=} -{,-}{,n}line{,s}{,=} \
-{,-}L{,=} -{,-}{,N}LINE{,S}{,=} \
-{,-}{b,byte,bytes}{,=} \
-{,-}{B,BYTE,BYTES}{,=} \
-{,-}{d,delim,delimiter}{,=}


# option does NOT take an argument, and can be passed via either:
# '-opt' (enable option/flag) --OR-- '+opt' (disable option/flag)
echo {-,+}{,-,+}{i,insert} \
{-,+}{,-,+}{I,INSERT,INSERT-ID,INSERTID} \
{-,+}{,-,+}{k,keep,keeporder,keep-order} \
{-,+}{,-,+}{n,number,numberlines,number-lines} \
{-,+}{,-,+}{z,0,zero,null} \
{-,+}{,-,+}{s,subshell,sub-shell,sub-shell-run,subshell-run} \
{-,+}{,-,+}S {-,+}{,-,+}{S,s}tdin{,run,-run} \
{-,+}{,-,+}{p,pipe,piperead,pipe-read} \
{-,+}{,-,+}{D,Delete,delete} \
{-,+}{,-,+}{N,NO} {-,+}{,-,+}{N,n}{O,o}{,-}func \
{-,+}{,-,+}{u,unescape} \
{-,+}{,-,+}{v,,vv,vvv,vvvv,verbose}

# option displays help text on

Читать полностью…

r_bash

print_firefox_bar_moving
;;
firefox*-lesser)
print_firefox_bar_static
;;
*-greater)
set_timestamps
print_other_player_bar_moving
;;
*-lesser)
set_timestamps
print_other_player_bar_static
;;
*)
exit
;;
esac



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

Читать полностью…

r_bash

1/5th as long as it took `fdupes` to do this.

# time { fdupes -r $(find / -maxdepth 1 -mindepth 1 | grep -vE 'DATA|sys|proc|dev|tmp|run') >/tmp/dupes-fdupes; }

real 10m24.062s
user 4m36.991s
sys 3m8.718s


# time { dupefind / -e \!/DATA >/tmp/dupes-dupefind; }

real 2m12.737s
user 14m22.523s
sys 12m12.109s

Granted `fdupes` is more "efficient" and has a fairly significant advantage in total CPU time, but (thanks to `forkrun`) `fdupes` is so much better at parallelizing its work that it still comes out way faster (in terms of "wall clock" time).

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

Читать полностью…

r_bash

Changing my career to be a webdev

Hi, I am (27 - male) and I have a very basic working knowledge of HTML and CSS, but interested in learning more. Is it safe to switch my career to be a devops engineer, Willing to set aside 03 years to perfect myself at a handful of current technologies. I need your opinion and would be grateful if you could provide me with a roadmap and basic project documentation.

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

Читать полностью…

r_bash

Trouble with autocompletion : won't finish the word

Hello !
I am learning bash and I am trying to create a little script for my homelab. I would like to improve it with autocompletion.

It looks like this :

#!/bin/bash
# On vérifie si un nom de conteneur a été donné
if [ -z "$1" ]; then
echo "Usage: $0 <nom_conteneur>"
exit 1
fi


nom_conteneur="$1"

# Run docker exec -it on the specified container
docker exec -it "$nom_conteneur" /bin/bash

It is accompanied by an autocompletion script that looks like this :

#/usr/bin/env bash

source /usr/share/bash-completion/completions/docker

complete -F __docker_complete_container_names teleport

Which is simply calling for the autocompletion script that already exists in Docker, I thought it would be best if I simply used it :

__docker_complete_container_names() {
local containers=( $(__docker_q ps -aq --no-trunc) )
local names=( $(__docker_q inspect --format '{{.Name}}' "${containers[@]}") )
names=( "${names[@]#/}" ) # trim off the leading "/" from the container names
COMPREPLY=( $(compgen -W "${names[*]}" -- "$cur") )
}

The problem is that, when I type `teleport` and press "Tab", it gives me a list of containers :

teleporter-autoheal teleporter-dock teleporter-filebrowser teleporter-haproxy teleporter-proxy teleporter-squid teleporter-terminal teleporter-vpn teleporter-web1

And even helpfully adds a "teleporter-" after "teleport" ...but if I add another letter, for example "a" to narrow it down to `autoheal`, pressing tab again just gives me the entire list again instead of finishing the word.



What could be the problem in your opinion ?

Edit : If I use the normal docker exec -it command, the autocompletion doesn't stop in the middle

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

Читать полностью…

r_bash

i want to write a script to pass a file through commands, point me in the right direction?

i apologize if im using the wrong language, im an extreme noob and trying to learn.

what i want is a script that allows me to compile kotlin files without hassle. currently to compile them through the command line i have to run

kotlinc [name of file].kt -include-runtime -d [name of file].jar



to compile the file into a .jar. then i have to run

java -jar [name of file]


to run the program with the JDK. what i want to do is be able to throw
BashScript [name of file].kt

into my console and have it do all that for me. im a little lost on what path to figure out how to do this, i don't think i have the correct language to search for what i need. any help is appreciated, just please don't write the script for me.

(and yes, i know intellij exists. im not writing android apps, im writing kotlin with nvim because i hate myself)

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

Читать полностью…

r_bash

                                XDG_SESSION_DESKTOP
echo_normal                                  .MathWorks/                                  _omb_term_background_magenta                 QT_ACCESSIBILITY                             XDG_SESSION_ID
echo_orange                                  .matlab/                                     _omb_term_background_navy                    QT_AUTO_SCREEN_SCALE_FACTOR                  XDG_SESSION_PATH
echo_purple                                  .MATLABConnector/                            _omb_term_background_olive                   QT_WAYLAND_FORCE_DPI                         XDG_SESSION_TYPE
echo_red                                     MEMORY_PRESSURE_WATCH                        _omb_term_background_purple                  QTWEBENGINE_DICTIONARIES_PATH                XDG_VTNR
echo_reset_color                             MEMORY_PRESSURE_WRITE                        _omb_term_background_red                     RANDOM                                       XKB_DEFAULT_LAYOUT
echo_underline_black                         .minecraft/                                  _omb_term_background_silver                  RBENV_THEME_PROMPT_PREFIX                    XKB_DEFAULT_MODEL
echo_underline_blue                          Minecraft/                                   _omb_term_background_teal                    RBENV_THEME_PROMPT_SUFFIX                    _xspecs
echo_underline_cyan                          MO_ORIGINAL_COMMAND                          _omb_term_background_violet                  RBFU_THEME_PROMPT_PREFIX                     yellow
echo_underline_green                         .mozilla/                                    _omb_term_background_white                   RBFU_THEME_PROMPT_SUFFIX                      
echo_underline_orange                        Music/                                       _omb_term_background_yellow                  red                                           
echo_underline_purple                        .mysql/                                      _omb_term_black                              _RED

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

Читать полностью…

r_bash

                    THEME_CLOCK_FORMAT
COLORFGBG                                    GTK_MODULES                                  _omb_prompt_green                            _omb_util_prompt_command_setup               THEME_PROMPT_HOST
COLORTERM                                    GTK_RC_FILES                                 _omb_prompt_lime                             _omb_util_readlink_visited_init              .themes/
COLUMNS                                      HISTCMD                                      _omb_prompt_magenta                          _omb_util_unload_hook                        THEME_SHOW_CLOCK
completions                                  HISTCONTROL                                  _omb_prompt_navy                             OMB_VERSINFO                                 THEME_SHOW_USER_HOST
COMP_WORDBREAKS                              HISTFILE                                     _omb_prompt_normal                           _omb_version                                 .thunderbird/
CONDAENV_THEME_PROMPT_PREFIX                 HISTFILESIZE                                 _omb_prompt_olive                            OMB_VERSION                                  UID
CONDAENV_THEME_PROMPT_SUFFIX                 HISTIGNORE                                   _omb_prompt_purple                           .openjfx/                                    underline
.config/                                     HISTSIZE                                     _omb_prompt_red                              OPTERR                                       underline_black
cyan                                         HISTTIMEFORMAT                               _omb_prompt_reset_color                      OPTIND                                       underline_blue
.darling/                                    HOME                                         OMB_PROMPT_SHOW_PYTHON_VENV                  orange                                       underline_cyan
.darling.workdir/                            HOSTNAME                                     _omb_prompt_silver                           OSH                                          underline_green
DBUS_SESSION_BUS_ADDRESS                     HOSTTYPE                                     _omb_prompt_teal                             OSH_CACHE_DIR                                underline_orange
Desktop/                                     .icons/                                      _omb_prompt_underline_black                  OSH_CUSTOM                                   underline_purple
DESKTOP_SESSION                              IFS                                          _omb_prompt_underline_blue                   OSH_SPECTRUM_TEXT                            underline_red
DIRSTACK                                     INVOCATION_ID                                _omb_prompt_underline_brown                  OSH_THEME                                    underline_white
DISPLAY                                      .java/                                       _omb_prompt_underline_cyan                   OSTYPE                                       underline_yellow
Documents/                                   JOURNAL_STREAM                               _omb_prompt_underline_gray                   PAGER                                        USER
.dotnet/                                     KDE_APPLICATIONS_AS_SCOPE                    _omb_prompt_underline_green                  PAM_KWALLET5_LOGIN                           USER_HOST_THEME_PROMPT_PREFIX
Downloads/                                   KDE_FULL_SESSION                             _omb_prompt_underline_lime                   .password-store/                             USER_HOST_THEME_PROMPT_SUFFIX
echo_background_black                        KDE_SESSION_UID                              _omb_prompt_underline_magenta                PATH                                         .var/
echo_background_blue                         KDE_SESSION_VERSION

Читать полностью…

r_bash

                                __git_color_moved_ws_opts                    OMB_DIRECTORIES_CD_USE_PUSHD                 _omb_term_bold_yellow                        SCM_GIT_UNSTAGED_CHAR
BASH                                         __git_config_sections                        _omb_git_post_1_7_2                          _omb_term_brown                              SCM_GIT_UNTRACKED_CHAR
BASH_ALIASES                                 __git_config_vars                            _omb_module_loaded                           _omb_term_colors                             SCM_HG
BASH_ARGC                                    __git_diff_algorithms                        _omb_prompt_background_black                 _omb_term_cyan                               SCM_HG_CHAR
BASH_ARGV                                    __git_diff_common_options                    _omb_prompt_background_blue                  _omb_term_gray                               SCM_NONE
BASH_ARGV0                                   __git_diff_difftool_options                  _omb_prompt_background_brown                 _omb_term_green                              SCM_NONE_CHAR
BASH_CMDS                                    __git_diff_merges_opts                       _omb_prompt_background_cyan                  _omb_term_lime                               SCM_SVN
BASH_COMMAND                                 __git_diff_submodule_formats                 _omb_prompt_background_gray                  _omb_term_magenta                            SCM_SVN_CHAR
BASH_COMPLETION_VERSINFO                     __git_fetch_recurse_submodules               _omb_prompt_background_green                 _omb_term_navy                               SCM_THEME_BRANCH_GONE_PREFIX
BASH_LINENO                                  __git_format_patch_extra_options             _omb_prompt_background_lime                  _omb_term_normal                             SCM_THEME_BRANCH_PREFIX
BASH_LOADABLES_PATH                          __git_log_common_options                     _omb_prompt_background_magenta               _omb_term_olive                              SCM_THEME_BRANCH_TRACK_PREFIX
BASHMARKS_SDIRS                              __git_log_date_formats                       _omb_prompt_background_navy                  _omb_term_purple                             SCM_THEME_CHAR_PREFIX
BASHOPTS                                     __git_log_gitk_options                       _omb_prompt_background_olive                 _omb_term_red                                SCM_THEME_CHAR_SUFFIX
BASHPID                                      __git_log_pretty_formats                     _omb_prompt_background_purple                _omb_term_reset                              SCM_THEME_CURRENT_USER_PREFFIX
BASH_REMATCH                                 __git_log_shortlog_options                   _omb_prompt_background_red                   _omb_term_reset_color                        SCM_THEME_CURRENT_USER_SUFFIX
BASH_SOURCE                                  __git_log_show_options                       _omb_prompt_background_silver                _omb_term_silver                             SCM_THEME_DETACHED_PREFIX
BASH_SUBSHELL                                __git_merge_strategies                       _omb_prompt_background_teal                  _omb_term_teal                               SCM_THEME_PROMPT_CLEAN
BASH_VERSINFO                                __git_merge_strategy_options                 _omb_prompt_background_white                 _omb_term_underline                          SCM_THEME_PROMPT_DIRTY
BASH_VERSION                                 __git_mergetools_common                      _omb_prompt_background_yellow                _omb_term_underline_black                    SCM_THEME_PROMPT_PREFIX
BG                                           __git_patchformat                            _omb_prompt_black                            _omb_term_underline_blue                     SCM_THEME_PROMPT_SUFFIX
black

Читать полностью…

r_bash

Decoding hex string

Input consists of 4 hex-encoded ASCII 0..9, a..f:

30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66

The task is to decode it back to ASCII.

- sample input: 30313233 (echo -n 0124 | xxd -p)
- sample output: 0123 (echo -n 30313233 | xxd -p -r)

Current approach:

x=30313233
printf -v u32 '%b' "\\x${x:0:2}\\x${x:2:2}\\x${x:4:2}\\x${x:6:2}"
declare -p u32

Is there a better way in terms of speed? It still must be pure shell.

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

Читать полностью…

r_bash

please someone help me im getting this error for my CIS229 unix class on gitbash, my instructor wants me to just delete the whole software and reinstall and ive done so much i dont wanna start over

Invalid command ':#', perhaps misspe...

\-bash: AH00526:: command not found

\-bash: Invalid: command not found

[root@cis-229-114 \~\]# systemctl restart httpd.service

Job for httpd.service failed because the control process exited with error code.

See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.

[root@cis-229-114 \~\]# sudo rm -rf /var/www/html/*

[root@cis-229-114 \~\]# mysql -u your_username -p -e "DROP DATABASE your_database_name;"

Enter password:

ERROR 1698 (28000): Access denied for user 'your_username'@'localhost'

[root@cis-229-114 \~\]# sudo mv wordpress/* .

mv: cannot stat 'wordpress/*': No such file or directory

[root@cis-229-114 \~\]# sudo rm -rf wordpress

[root@cis-229-114 \~\]#

[root@cis-229-114 \~\]# sudo chown -R www-data:www-data /var/www/html/

sudo chmod -R 755 /var/www/html/

chown: invalid user: ‘www-data:www-data’

[root@cis-229-114 \~\]# systemctl restar

Unknown command verb restar.

[root@cis-229-114 \~\]# systemctl restart

Too few arguments.

[root@cis-229-114 \~\]# systemctl restart httpd

Job for httpd.service failed because the control process exited with error code.

See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.

&#x200B;

https://preview.redd.it/yf6nsmvgxtkc1.png?width=1226&amp;format=png&amp;auto=webp&amp;s=18cf1a3d82aaca52e29b0c66a6cb8cc71f377c4d

&#x200B;

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

Читать полностью…

r_bash

Calling all Bashers who work with JSON files...

Hi, I work extensively with JSON files in my automation scripts, so much that I got sick of writing out long lines for JQ.

So I have been building a Bash library with all the JSON functionality I need, as simple to use functions that then do all the underlying work for you.

I need such a library for four other projects I am working on for work, however, we believe in OpenSource and want to give it to you all to use. Before then, I need testers, and I need people to provide recommendations for additional features.

So far we have these functions:

* jsonadd - add a key as an array/value/object to a location
* jsondelete - delete a key from a location
* jsonecho - echo out a location as a string - either to display or into a variable
* jsonedit - edit a key at a location
* jsonembed - strange one, but I have a use case, basically convert JSON where all " is escaped to be \\"
* jsonextract - as above, but the other way round
* jsonlist - list all key names at a location, either to display or into an array
* jsonmerge - merge two json files or datasets into a single file or data sets. Convert matching locations into arrays. Option to merge dups into single entries.
* jsonnew - create a new blank jsonfile or dataset.
* jsonpretty - convert a json file into a pretty format
* jsonsearch - find all locations of a keyname and list them either on screen or into an array
* jsonseek - find all index values in array where key=value - output to screen or an array
* jsonskeleton - writes an array of json keys to a location with each key=null
* jsonsize - if it's a string it returns number of characters, if its a number / boolean / null returns 0, if it's an object returns number of keys, it's an array returns number of indexes.
* jsonsort - writes json file or data into alphabetical order - conserves order of array indexes
* jsonstring - convert a json file into a condensed single line file
* jsontest - tests a key location - returns void if not exist, else returns string, number, null, boolean, object or array
* jsonvalid - validates json file, returns an array of errors or returns nothing if it is valid
* jsonwrite - writes json from a variable to a new file

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

Читать полностью…

r_bash

Anyone else?

I'm writing a script that does all my install and config from a base xorg install of Arch. My script offers WM choices and choices for a simple or extended install. Nothing hard at all...but sometimes I just stare at it running options through my head looking for ways to make it more functional..etc. I see all these options but just can't move forward because as soon as I do write something I will come up with a better way. I have been staring at the skeleton of my script for hours.
At least I have a good playlist playing.
What do you do to break out of this mode?

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

Читать полностью…

r_bash

How to enable 'live' history expansion on the current line?

When I migrated from my old computer to new I lost the ability to perform 'live' history expansion while I type - at least, this is how I recollect it would work - for example, consider these two commands...

ls -l /etc/hosts
cat !$

.. if I recall correctly, as soon as I press SPACE after typing the dollar sign in the second command, the "!$" would be 'live' expanded to "/etc/hosts". It was *very* useful because you can see what the expression would expand to prior to submitting the command.

&#x200B;

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

Читать полностью…

r_bash

stderr and then returns.
# There are 5 different "levels" of help text that can be displayed.
echo -{,-}usage \
-{,-}{\?,h,help} \
-{,-}help={s,short} \
-{,-}help={f,flags} \
-{,-}help={a,all}

***

Any tips on how to go about implementing this? Can anyone confirm whether or not it is even possible to do this in the way id like for it to work?

Thanks in advance.

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

Читать полностью…

r_bash

Tracing where a function was called from

Take for example the following script:

#!/bin/bash

function somefunctionname {
some
code
goes
here
}

function anotherfunctionname {
some
other
code
goes
here
}

main
code
goes
here

What I want to do is have the first function identify if I called the first function from inside the second function or from inside the main part of the code. Is there a way to do this automatically without using global variables or adding data to the end of the function call?

&#x200B;

Edit: Basically I need to know if it was called from inside another function, and if so, what was that function called. If I don't get a function name I can assume it's the main program.

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

Читать полностью…
Subscribe to a channel