home.social

#shellscripting — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #shellscripting, aggregated by home.social.

  1. This is old news to anyone with actual command-line skills, but it saved me today when doing a Blender render that kept crashing. I normally render from the command line because it means I can keep posting toots, er, I mean working productively for my employer in the foreground while it's rendering, and because it's usually faster (especially if you can run multiple instances).
    Since I set up my scene to render an image sequence with overwriting turned off I can restart the render each time and pick up where it left off. But because command line, I can automate that process. In zsh (it will probably work on Bash or other shells I dunno) I do:
    `blender -b '/path/to/my/project.blend' -a; while [[ $? != 0 ]]; do; echo "!!!! Oh bollocks !!!!"; blender -b '/path/to/my/project.blend' -a; done`
    The guts of it is the `while` loop. This will loop as long as `$?` is not equal to 0. `$?` is a variable that holds the result of the previous operation, which is 0 if the previous operation succeeds. So if blender crashes it returns some non-zero return code, and the loop starts it up again.
    For info on rendering from the command line: docs.blender.org/manual/en/lat
    #blender #ShellScripting #CommandLine

    ---EDIT----
    Check the replies for a more terse and elegant way to do this.
    Also, here's a screenie of it in action, you can see it crashing and then starting again. This is on OSX so there's a dialog box that pops up, luckily the shell ignores the user's rsponse and continues anyway.
    1/2

  2. This is old news to anyone with actual command-line skills, but it saved me today when doing a Blender render that kept crashing. I normally render from the command line because it means I can keep posting toots, er, I mean working productively for my employer in the foreground while it's rendering, and because it's usually faster (especially if you can run multiple instances).
    Since I set up my scene to render an image sequence with overwriting turned off I can restart the render each time and pick up where it left off. But because command line, I can automate that process. In zsh (it will probably work on Bash or other shells I dunno) I do:
    `blender -b '/path/to/my/project.blend' -a; while [[ $? != 0 ]]; do; echo "!!!! Oh bollocks !!!!"; blender -b '/path/to/my/project.blend' -a; done`
    The guts of it is the `while` loop. This will loop as long as `$?` is not equal to 0. `$?` is a variable that holds the result of the previous operation, which is 0 if the previous operation succeeds. So if blender crashes it returns some non-zero return code, and the loop starts it up again.
    For info on rendering from the command line: docs.blender.org/manual/en/lat
    #blender #ShellScripting #CommandLine

    ---EDIT----
    Check the replies for a more terse and elegant way to do this.
    Also, here's a screenie of it in action, you can see it crashing and then starting again. This is on OSX so there's a dialog box that pops up, luckily the shell ignores the user's rsponse and continues anyway.
    1/2

  3. This is old news to anyone with actual command-line skills, but it saved me today when doing a Blender render that kept crashing. I normally render from the command line because it means I can keep posting toots, er, I mean working productively for my employer in the foreground while it's rendering, and because it's usually faster (especially if you can run multiple instances).
    Since I set up my scene to render an image sequence with overwriting turned off I can restart the render each time and pick up where it left off. But because command line, I can automate that process. In zsh (it will probably work on Bash or other shells I dunno) I do:
    `blender -b '/path/to/my/project.blend' -a; while [[ $? != 0 ]]; do; echo "!!!! Oh bollocks !!!!"; blender -b '/path/to/my/project.blend' -a; done`
    The guts of it is the `while` loop. This will loop as long as `$?` is not equal to 0. `$?` is a variable that holds the result of the previous operation, which is 0 if the previous operation succeeds. So if blender crashes it returns some non-zero return code, and the loop starts it up again.
    For info on rendering from the command line: docs.blender.org/manual/en/lat
    #blender #ShellScripting #CommandLine

    ---EDIT----
    Check the replies for a more terse and elegant way to do this.
    Also, here's a screenie of it in action, you can see it crashing and then starting again. This is on OSX so there's a dialog box that pops up, luckily the shell ignores the user's rsponse and continues anyway.
    1/2

  4. This is old news to anyone with actual command-line skills, but it saved me today when doing a Blender render that kept crashing. I normally render from the command line because it means I can keep posting toots, er, I mean working productively for my employer in the foreground while it's rendering, and because it's usually faster (especially if you can run multiple instances).
    Since I set up my scene to render an image sequence with overwriting turned off I can restart the render each time and pick up where it left off. But because command line, I can automate that process. In zsh (it will probably work on Bash or other shells I dunno) I do:
    `blender -b '/path/to/my/project.blend' -a; while [[ $? != 0 ]]; do; echo "!!!! Oh bollocks !!!!"; blender -b '/path/to/my/project.blend' -a; done`
    The guts of it is the `while` loop. This will loop as long as `$?` is not equal to 0. `$?` is a variable that holds the result of the previous operation, which is 0 if the previous operation succeeds. So if blender crashes it returns some non-zero return code, and the loop starts it up again.
    For info on rendering from the command line: docs.blender.org/manual/en/lat
    #blender #ShellScripting #CommandLine

    ---EDIT----
    Check the replies for a more terse and elegant way to do this.
    Also, here's a screenie of it in action, you can see it crashing and then starting again. This is on OSX so there's a dialog box that pops up, luckily the shell ignores the user's rsponse and continues anyway.
    1/2

  5. This is old news to anyone with actual command-line skills, but it saved me today when doing a Blender render that kept crashing. I normally render from the command line because it means I can keep posting toots, er, I mean working productively for my employer in the foreground while it's rendering, and because it's usually faster (especially if you can run multiple instances).
    Since I set up my scene to render an image sequence with overwriting turned off I can restart the render each time and pick up where it left off. But because command line, I can automate that process. In zsh (it will probably work on Bash or other shells I dunno) I do:
    `blender -b '/path/to/my/project.blend' -a; while [[ $? != 0 ]]; do; echo "!!!! Oh bollocks !!!!"; blender -b '/path/to/my/project.blend' -a; done`
    The guts of it is the `while` loop. This will loop as long as `$?` is not equal to 0. `$?` is a variable that holds the result of the previous operation, which is 0 if the previous operation succeeds. So if blender crashes it returns some non-zero return code, and the loop starts it up again.
    For info on rendering from the command line: docs.blender.org/manual/en/lat
    #blender #ShellScripting #CommandLine

    ---EDIT----
    Check the replies for a more terse and elegant way to do this.
    Also, here's a screenie of it in action, you can see it crashing and then starting again. This is on OSX so there's a dialog box that pops up, luckily the shell ignores the user's rsponse and continues anyway.
    1/2

  6. Day 2/60 #BashSecurity -- Variables and types

    Bash's "type system" is: everything is a string. This causes real security issues.

    ```bash
    # This is an injection vulnerability:
    user_in="file.txt; cat /etc/shadow"
    grep $user_in /var/log/auth.log

    # This is safe:
    grep "$user_in" /var/log/auth.log
    ```

    Other gotchas:
    - `declare -i num=5; num="abc"` silently sets num to 0
    - `export SECRET` makes it readable via /proc/self/environ
    - `readonly CFG=/etc/app` prevents runtime tampering
    - `x = 5` (with spaces) runs x as a command, not assignment

    Quote every expansion. Validate every input. Trust nothing.

    #InfoSec #CyberSecurity #Linux #ShellScripting

  7. Wrote a #shell function without using ls inside of $( ), so my inner @mirabilos won't harass me. XD

    #slightly easier wireguard command
    function wg {
        local dir file profile profiledir= parm=${1:-} statustext
        #Find profile dir
        for dir in {,/usr/local}/etc/wireguard; do
            if [[ -d $dir ]]; then
                profiledir=$dir
                break
            fi
        done
        #Find config file
        if [[ -n $profiledir ]]; then
            for file in $profiledir/*.conf; do
                if [[ -e $file ]]; then
                    profile=${file//*\/}
                    profile=${profile/.conf}
                    break
                fi
            done
        fi
        [[ -n $profile ]] || profile=proton
        statustext="wireguard profile $profile"
        case ${parm,,} in
            up|on)      doas wg-quick  up  $profile;;
            down|off)   doas wg-quick down $profile;;
            status)     echo -en "$statustext _______\r"
                        echo -en "$statustext "
                        ifconfig |grep -q "^$profile:" && echo enabled || echo disabled;;
            *)          warn "wg usage: wg up|down|status";;
        esac
    }
    

    Hmm, seems ${foo,,} for lower case conversion is #bash-only. I wonder if I should use tr instead.

    #Unix #UnixShell #ShellScript #ShellScripting

  8. Wrote a #shell function without using ls inside of $( ), so my inner @mirabilos won't harass me. XD

    #slightly easier wireguard command
    function wg {
        local dir file profile profiledir= parm=${1:-} statustext
        #Find profile dir
        for dir in {,/usr/local}/etc/wireguard; do
            if [[ -d $dir ]]; then
                profiledir=$dir
                break
            fi
        done
        #Find config file
        if [[ -n $profiledir ]]; then
            for file in $profiledir/*.conf; do
                if [[ -e $file ]]; then
                    profile=${file//*\/}
                    profile=${profile/.conf}
                    break
                fi
            done
        fi
        [[ -n $profile ]] || profile=proton
        statustext="wireguard profile $profile"
        case ${parm,,} in
            up|on)      doas wg-quick  up  $profile;;
            down|off)   doas wg-quick down $profile;;
            status)     echo -en "$statustext _______\r"
                        echo -en "$statustext "
                        ifconfig |grep -q "^$profile:" && echo enabled || echo disabled;;
            *)          warn "wg usage: wg up|down|status";;
        esac
    }
    

    Hmm, seems ${foo,,} for lower case conversion is #bash-only. I wonder if I should use tr instead.

    #Unix #UnixShell #ShellScript #ShellScripting

  9. Wrote a #shell function without using ls inside of $( ), so my inner @mirabilos won't harass me. XD

    #slightly easier wireguard command
    function wg {
        local dir file profile profiledir= parm=${1:-} statustext
        #Find profile dir
        for dir in {,/usr/local}/etc/wireguard; do
            if [[ -d $dir ]]; then
                profiledir=$dir
                break
            fi
        done
        #Find config file
        if [[ -n $profiledir ]]; then
            for file in $profiledir/*.conf; do
                if [[ -e $file ]]; then
                    profile=${file//*\/}
                    profile=${profile/.conf}
                    break
                fi
            done
        fi
        [[ -n $profile ]] || profile=proton
        statustext="wireguard profile $profile"
        case ${parm,,} in
            up|on)      doas wg-quick  up  $profile;;
            down|off)   doas wg-quick down $profile;;
            status)     echo -en "$statustext _______\r"
                        echo -en "$statustext "
                        ifconfig |grep -q "^$profile:" && echo enabled || echo disabled;;
            *)          warn "wg usage: wg up|down|status";;
        esac
    }
    

    Hmm, seems ${foo,,} for lower case conversion is #bash-only. I wonder if I should use tr instead.

    #Unix #UnixShell #ShellScript #ShellScripting

  10. Wrote a #shell function without using ls inside of $( ), so my inner @mirabilos won't harass me. XD

    #slightly easier wireguard command
    function wg {
        local dir file profile profiledir= parm=${1:-} statustext
        #Find profile dir
        for dir in {,/usr/local}/etc/wireguard; do
            if [[ -d $dir ]]; then
                profiledir=$dir
                break
            fi
        done
        #Find config file
        if [[ -n $profiledir ]]; then
            for file in $profiledir/*.conf; do
                if [[ -e $file ]]; then
                    profile=${file//*\/}
                    profile=${profile/.conf}
                    break
                fi
            done
        fi
        [[ -n $profile ]] || profile=proton
        statustext="wireguard profile $profile"
        case ${parm,,} in
            up|on)      doas wg-quick  up  $profile;;
            down|off)   doas wg-quick down $profile;;
            status)     echo -en "$statustext _______\r"
                        echo -en "$statustext "
                        ifconfig |grep -q "^$profile:" && echo enabled || echo disabled;;
            *)          warn "wg usage: wg up|down|status";;
        esac
    }
    

    Hmm, seems ${foo,,} for lower case conversion is #bash-only. I wonder if I should use tr instead.

    #Unix #UnixShell #ShellScript #ShellScripting

  11. Wrote a #shell function without using ls inside of $( ), so my inner @mirabilos won't harass me. XD

    #slightly easier wireguard command
    function wg {
        local dir file profile profiledir= parm=${1:-} statustext
        #Find profile dir
        for dir in {,/usr/local}/etc/wireguard; do
            if [[ -d $dir ]]; then
                profiledir=$dir
                break
            fi
        done
        #Find config file
        if [[ -n $profiledir ]]; then
            for file in $profiledir/*.conf; do
                if [[ -e $file ]]; then
                    profile=${file//*\/}
                    profile=${profile/.conf}
                    break
                fi
            done
        fi
        [[ -n $profile ]] || profile=proton
        statustext="wireguard profile $profile"
        case ${parm,,} in
            up|on)      doas wg-quick  up  $profile;;
            down|off)   doas wg-quick down $profile;;
            status)     echo -en "$statustext _______\r"
                        echo -en "$statustext "
                        ifconfig |grep -q "^$profile:" && echo enabled || echo disabled;;
            *)          warn "wg usage: wg up|down|status";;
        esac
    }
    

    Hmm, seems ${foo,,} for lower case conversion is #bash-only. I wonder if I should use tr instead.

    #Unix #UnixShell #ShellScript #ShellScripting

  12. @heinelo das kann ich gut nachvollziehen, allerdings würde ich auch ins Feld führen, daß #macos im Kern auch ein linuixes System ist und von daher so genutzt werden kann.
    In der graphischen Industrie sind #adobe Produkte einfach nicht weg zu denken. Deswegen verwende ich meine #mac Rechner eher wie #opensource Plattformen. Installationen werden mit #shellscripting erledigt und Programme mit #homebrew installiert.
    Ich verwende keine AppleIDs, eigene Clouds, Aressbücher, Kalender und einen eigenen Mailserver bei Kunden und bei mir selbst.
    So finde ich ist ein #macos ein unabhängiges System, welches auch keinem #killswitch ausgesetzt sein wird, denn sollte sich Apple dazu entscheiden keine Updates mehr zu liefern – was ich nicht glaube – dann installiere ich mir auf den Geräten #Linux, was ich eh schon mit meinen alten #apple Rechnern gemacht habe.

  13. @heinelo das kann ich gut nachvollziehen, allerdings würde ich auch ins Feld führen, daß #macos im Kern auch ein linuixes System ist und von daher so genutzt werden kann.
    In der graphischen Industrie sind #adobe Produkte einfach nicht weg zu denken. Deswegen verwende ich meine #mac Rechner eher wie #opensource Plattformen. Installationen werden mit #shellscripting erledigt und Programme mit #homebrew installiert.
    Ich verwende keine AppleIDs, eigene Clouds, Aressbücher, Kalender und einen eigenen Mailserver bei Kunden und bei mir selbst.
    So finde ich ist ein #macos ein unabhängiges System, welches auch keinem #killswitch ausgesetzt sein wird, denn sollte sich Apple dazu entscheiden keine Updates mehr zu liefern – was ich nicht glaube – dann installiere ich mir auf den Geräten #Linux, was ich eh schon mit meinen alten #apple Rechnern gemacht habe.

  14. @heinelo das kann ich gut nachvollziehen, allerdings würde ich auch ins Feld führen, daß #macos im Kern auch ein linuixes System ist und von daher so genutzt werden kann.
    In der graphischen Industrie sind #adobe Produkte einfach nicht weg zu denken. Deswegen verwende ich meine #mac Rechner eher wie #opensource Plattformen. Installationen werden mit #shellscripting erledigt und Programme mit #homebrew installiert.
    Ich verwende keine AppleIDs, eigene Clouds, Aressbücher, Kalender und einen eigenen Mailserver bei Kunden und bei mir selbst.
    So finde ich ist ein #macos ein unabhängiges System, welches auch keinem #killswitch ausgesetzt sein wird, denn sollte sich Apple dazu entscheiden keine Updates mehr zu liefern – was ich nicht glaube – dann installiere ich mir auf den Geräten #Linux, was ich eh schon mit meinen alten #apple Rechnern gemacht habe.

  15. @heinelo das kann ich gut nachvollziehen, allerdings würde ich auch ins Feld führen, daß #macos im Kern auch ein linuixes System ist und von daher so genutzt werden kann.
    In der graphischen Industrie sind #adobe Produkte einfach nicht weg zu denken. Deswegen verwende ich meine #mac Rechner eher wie #opensource Plattformen. Installationen werden mit #shellscripting erledigt und Programme mit #homebrew installiert.
    Ich verwende keine AppleIDs, eigene Clouds, Aressbücher, Kalender und einen eigenen Mailserver bei Kunden und bei mir selbst.
    So finde ich ist ein #macos ein unabhängiges System, welches auch keinem #killswitch ausgesetzt sein wird, denn sollte sich Apple dazu entscheiden keine Updates mehr zu liefern – was ich nicht glaube – dann installiere ich mir auf den Geräten #Linux, was ich eh schon mit meinen alten #apple Rechnern gemacht habe.

  16. @heinelo das kann ich gut nachvollziehen, allerdings würde ich auch ins Feld führen, daß #macos im Kern auch ein linuixes System ist und von daher so genutzt werden kann.
    In der graphischen Industrie sind #adobe Produkte einfach nicht weg zu denken. Deswegen verwende ich meine #mac Rechner eher wie #opensource Plattformen. Installationen werden mit #shellscripting erledigt und Programme mit #homebrew installiert.
    Ich verwende keine AppleIDs, eigene Clouds, Aressbücher, Kalender und einen eigenen Mailserver bei Kunden und bei mir selbst.
    So finde ich ist ein #macos ein unabhängiges System, welches auch keinem #killswitch ausgesetzt sein wird, denn sollte sich Apple dazu entscheiden keine Updates mehr zu liefern – was ich nicht glaube – dann installiere ich mir auf den Geräten #Linux, was ich eh schon mit meinen alten #apple Rechnern gemacht habe.

  17. Some really neat tricks here in this Shell Tricks blog post by burningboard.net/@Larvitz -- thanks Larvitz!

    I knew of most of them, but am glad to have now learned of:

    1. "fc" to edit the previous command in your editor of choice
    2. "**" (globstar) for recursive searching instead of needing to use find (or ls -R)
    3. That "esc-." is repeatable to go back further than just the previous command's last arg. I use that all the time, but never thought to hit it more than once!

    blog.hofstede.it/shell-tricks-

    #shell #ShellTricks #shellscripting

  18. Some really neat tricks here in this Shell Tricks blog post by burningboard.net/@Larvitz -- thanks Larvitz!

    I knew of most of them, but am glad to have now learned of:

    1. "fc" to edit the previous command in your editor of choice
    2. "**" (globstar) for recursive searching instead of needing to use find (or ls -R)
    3. That "esc-." is repeatable to go back further than just the previous command's last arg. I use that all the time, but never thought to hit it more than once!

    blog.hofstede.it/shell-tricks-

    #shell #ShellTricks #shellscripting

  19. Some really neat tricks here in this Shell Tricks blog post by burningboard.net/@Larvitz -- thanks Larvitz!

    I knew of most of them, but am glad to have now learned of:

    1. "fc" to edit the previous command in your editor of choice
    2. "**" (globstar) for recursive searching instead of needing to use find (or ls -R)
    3. That "esc-." is repeatable to go back further than just the previous command's last arg. I use that all the time, but never thought to hit it more than once!

    blog.hofstede.it/shell-tricks-

  20. Some really neat tricks here in this Shell Tricks blog post by burningboard.net/@Larvitz -- thanks Larvitz!

    I knew of most of them, but am glad to have now learned of:

    1. "fc" to edit the previous command in your editor of choice
    2. "**" (globstar) for recursive searching instead of needing to use find (or ls -R)
    3. That "esc-." is repeatable to go back further than just the previous command's last arg. I use that all the time, but never thought to hit it more than once!

    blog.hofstede.it/shell-tricks-

    #shell #ShellTricks #shellscripting

  21. Some really neat tricks here in this Shell Tricks blog post by burningboard.net/@Larvitz -- thanks Larvitz!

    I knew of most of them, but am glad to have now learned of:

    1. "fc" to edit the previous command in your editor of choice
    2. "**" (globstar) for recursive searching instead of needing to use find (or ls -R)
    3. That "esc-." is repeatable to go back further than just the previous command's last arg. I use that all the time, but never thought to hit it more than once!

    blog.hofstede.it/shell-tricks-

    #shell #ShellTricks #shellscripting

  22. Recursion usually scares me a bit, but it worked out nicely here:

    #convert "cx"-style Esperanto notation to native accents (ĉ)
    function eaccent {
        if [[ ${1:-} ]]; then
            echo "$*" |eaccent
        else
            sed 's/cx/ĉ/g; s/gx/ĝ/g; s/hx/ĥ/g; s/jx/ĵ/g; s/sx/ŝ/g; s/ux/ŭ/g; s/C[xX]/Ĉ/g; s/G[xX]/Ĝ/g; s/H[xX]/Ĥ/g; s/J[xX]/Ĵ/g; s/S[xX]/Ŝ/g; s/U[xX]/Ŭ/g'
        fi
    }
    

    #bash #unix #shell #scripts #scripting #UnixShell #ShellScripting #Esperanto

  23. Recursion usually scares me a bit, but it worked out nicely here:

    #convert "cx"-style Esperanto notation to native accents (ĉ)
    function eaccent {
        if [[ ${1:-} ]]; then
            echo "$*" |eaccent
        else
            sed 's/cx/ĉ/g; s/gx/ĝ/g; s/hx/ĥ/g; s/jx/ĵ/g; s/sx/ŝ/g; s/ux/ŭ/g; s/C[xX]/Ĉ/g; s/G[xX]/Ĝ/g; s/H[xX]/Ĥ/g; s/J[xX]/Ĵ/g; s/S[xX]/Ŝ/g; s/U[xX]/Ŭ/g'
        fi
    }
    

    #bash #unix #shell #scripts #scripting #UnixShell #ShellScripting #Esperanto

  24. Recursion usually scares me a bit, but it worked out nicely here:

    #convert "cx"-style Esperanto notation to native accents (ĉ)
    function eaccent {
        if [[ ${1:-} ]]; then
            echo "$*" |eaccent
        else
            sed 's/cx/ĉ/g; s/gx/ĝ/g; s/hx/ĥ/g; s/jx/ĵ/g; s/sx/ŝ/g; s/ux/ŭ/g; s/C[xX]/Ĉ/g; s/G[xX]/Ĝ/g; s/H[xX]/Ĥ/g; s/J[xX]/Ĵ/g; s/S[xX]/Ŝ/g; s/U[xX]/Ŭ/g'
        fi
    }
    

    #bash #unix #shell #scripts #scripting #UnixShell #ShellScripting #Esperanto

  25. Recursion usually scares me a bit, but it worked out nicely here:

    #convert "cx"-style Esperanto notation to native accents (ĉ)
    function eaccent {
        if [[ ${1:-} ]]; then
            echo "$*" |eaccent
        else
            sed 's/cx/ĉ/g; s/gx/ĝ/g; s/hx/ĥ/g; s/jx/ĵ/g; s/sx/ŝ/g; s/ux/ŭ/g; s/C[xX]/Ĉ/g; s/G[xX]/Ĝ/g; s/H[xX]/Ĥ/g; s/J[xX]/Ĵ/g; s/S[xX]/Ŝ/g; s/U[xX]/Ŭ/g'
        fi
    }
    

    #bash #unix #shell #scripts #scripting #UnixShell #ShellScripting #Esperanto

  26. Recursion usually scares me a bit, but it worked out nicely here:

    #convert "cx"-style Esperanto notation to native accents (ĉ)
    function eaccent {
        if [[ ${1:-} ]]; then
            echo "$*" |eaccent
        else
            sed 's/cx/ĉ/g; s/gx/ĝ/g; s/hx/ĥ/g; s/jx/ĵ/g; s/sx/ŝ/g; s/ux/ŭ/g; s/C[xX]/Ĉ/g; s/G[xX]/Ĝ/g; s/H[xX]/Ĥ/g; s/J[xX]/Ĵ/g; s/S[xX]/Ŝ/g; s/U[xX]/Ŭ/g'
        fi
    }
    

    #bash #unix #shell #scripts #scripting #UnixShell #ShellScripting #Esperanto

  27. 🐢💤 Behold the revolutionary art of making Git diffs more complex than assembling IKEA furniture! All you need is #Delta, #fzf, a sprinkle of shell scripting, and the willingness to never see the sunlight again. Truly, the pinnacle of productivity hacks for those with too much time on their hands! 🙄🔧
    nickjanetakis.com/blog/awesome #GitDiffs #ProductivityHacks #ShellScripting #TechHumor #HackerNews #ngated

  28. 🐢💤 Behold the revolutionary art of making Git diffs more complex than assembling IKEA furniture! All you need is #Delta, #fzf, a sprinkle of shell scripting, and the willingness to never see the sunlight again. Truly, the pinnacle of productivity hacks for those with too much time on their hands! 🙄🔧
    nickjanetakis.com/blog/awesome #GitDiffs #ProductivityHacks #ShellScripting #TechHumor #HackerNews #ngated

  29. 🐢💤 Behold the revolutionary art of making Git diffs more complex than assembling IKEA furniture! All you need is #Delta, #fzf, a sprinkle of shell scripting, and the willingness to never see the sunlight again. Truly, the pinnacle of productivity hacks for those with too much time on their hands! 🙄🔧
    nickjanetakis.com/blog/awesome #GitDiffs #ProductivityHacks #ShellScripting #TechHumor #HackerNews #ngated

  30. 🐢💤 Behold the revolutionary art of making Git diffs more complex than assembling IKEA furniture! All you need is #Delta, #fzf, a sprinkle of shell scripting, and the willingness to never see the sunlight again. Truly, the pinnacle of productivity hacks for those with too much time on their hands! 🙄🔧
    nickjanetakis.com/blog/awesome #GitDiffs #ProductivityHacks #ShellScripting #TechHumor #HackerNews #ngated

  31. 🐢💤 Behold the revolutionary art of making Git diffs more complex than assembling IKEA furniture! All you need is #Delta, #fzf, a sprinkle of shell scripting, and the willingness to never see the sunlight again. Truly, the pinnacle of productivity hacks for those with too much time on their hands! 🙄🔧
    nickjanetakis.com/blog/awesome #GitDiffs #ProductivityHacks #ShellScripting #TechHumor #HackerNews #ngated

  32. TL;DW for the video:

    Lock Fix: Detects/removes stale db.lck.

    PGP Engine: Auto-fetches missing keys.

    Wiki Deep-link: [w] opens the specific Wiki page for the error.

    Smart Search: Finds package owners for missing binaries.

    Repo: github.com/Rakosn1cek/mend (2/2)

    #ShellScripting #ArchLinux #Dotfiles #DevLog

  33. TL;DW for the video:

    Lock Fix: Detects/removes stale db.lck.

    PGP Engine: Auto-fetches missing keys.

    Wiki Deep-link: [w] opens the specific Wiki page for the error.

    Smart Search: Finds package owners for missing binaries.

    Repo: github.com/Rakosn1cek/mend (2/2)

    #ShellScripting #ArchLinux #Dotfiles #DevLog

  34. TL;DW for the video:

    Lock Fix: Detects/removes stale db.lck.

    PGP Engine: Auto-fetches missing keys.

    Wiki Deep-link: [w] opens the specific Wiki page for the error.

    Smart Search: Finds package owners for missing binaries.

    Repo: github.com/Rakosn1cek/mend (2/2)

    #ShellScripting #ArchLinux #Dotfiles #DevLog

  35. TL;DW for the video:

    Lock Fix: Detects/removes stale db.lck.

    PGP Engine: Auto-fetches missing keys.

    Wiki Deep-link: [w] opens the specific Wiki page for the error.

    Smart Search: Finds package owners for missing binaries.

    Repo: github.com/Rakosn1cek/mend (2/2)

    #ShellScripting #ArchLinux #Dotfiles #DevLog

  36. TL;DW for the video:

    Lock Fix: Detects/removes stale db.lck.

    PGP Engine: Auto-fetches missing keys.

    Wiki Deep-link: [w] opens the specific Wiki page for the error.

    Smart Search: Finds package owners for missing binaries.

    Repo: github.com/Rakosn1cek/mend (2/2)

    #ShellScripting #ArchLinux #Dotfiles #DevLog

  37. I got annoyed at having to know how many lines I want to `head` or `tail`, and having to write the same stuff over and over again using `cat -n` / `grep` (or even worse an awk script) to figure them out on the fly, so ... two new scripts, `ignore-after` and `ignore-up-to` which are basically content-based versions of `head` and `tail`.

    You're welcome.

    github.com/DrHyde/shellscripts

    #ShellScripting #shell #unix

  38. I got annoyed at having to know how many lines I want to `head` or `tail`, and having to write the same stuff over and over again using `cat -n` / `grep` (or even worse an awk script) to figure them out on the fly, so ... two new scripts, `ignore-after` and `ignore-up-to` which are basically content-based versions of `head` and `tail`.

    You're welcome.

    github.com/DrHyde/shellscripts

  39. I got annoyed at having to know how many lines I want to `head` or `tail`, and having to write the same stuff over and over again using `cat -n` / `grep` (or even worse an awk script) to figure them out on the fly, so ... two new scripts, `ignore-after` and `ignore-up-to` which are basically content-based versions of `head` and `tail`.

    You're welcome.

    github.com/DrHyde/shellscripts

    #ShellScripting #shell #unix

  40. I got annoyed at having to know how many lines I want to `head` or `tail`, and having to write the same stuff over and over again using `cat -n` / `grep` (or even worse an awk script) to figure them out on the fly, so ... two new scripts, `ignore-after` and `ignore-up-to` which are basically content-based versions of `head` and `tail`.

    You're welcome.

    github.com/DrHyde/shellscripts

    #ShellScripting #shell #unix