# Scripting, bash

Bash scripting uses the Bash command language to combine commands and automate tasks.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Configure Bash History: HISTSIZE, Timestamps, Sync, and Search Shortcuts

DevFeed: [Configure Bash History: HISTSIZE, Timestamps, Sync, and Search Shortcuts](<https://devfeed.tech/articles/master-linux-bash-history-with-historyctl-histfile-and-shortcuts-20864.md>)

Original publisher: [Read original article](<https://linuxblog.io/bash-history-historyctl-histfile-shortcuts/>)

Author: Hayden James

Published: 2026-09-03T18:31:24Z

Content type: tutorial

Language: en

Sources: [Hayden James](<https://devfeed.tech/sources/hayden-james.md>)

Topics: [Bash](<https://devfeed.tech/topics/bash.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [blog](<https://devfeed.tech/tags/blog.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [commands](<https://devfeed.tech/tags/commands.md>), [history](<https://devfeed.tech/tags/history.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [security](<https://devfeed.tech/tags/security.md>), [server](<https://devfeed.tech/tags/server.md>), [sysadmins](<https://devfeed.tech/tags/sysadmins.md>)

### AI overview

A tutorial on configuring Bash command history, including history size, timestamps, synchronization across terminals, search shortcuts, and excluding commands from history.

### Source excerpt

Bash history does a lot more than scroll up. Learn how to configure HISTSIZE, timestamps, multi-terminal sync, and search shortcuts to get real productivity gains at the command line. Continue reading...

## netlab: Switch to Lab Directory After an SSH Session Loss

DevFeed: [netlab: Switch to Lab Directory After an SSH Session Loss](<https://devfeed.tech/articles/netlab-switch-to-lab-directory-after-an-ssh-session-loss-11350.md>)

Original publisher: [Read original article](<https://blog.ipspace.net/2026/03/netlab-switch-lab-directory/>)

Published: 2026-03-23T07:31:00Z

Content type: tutorial

Language: en

Sources: [ipSpace.net blog](<https://devfeed.tech/sources/ipspace-net-blog.md>)

Topics: [ssh](<https://devfeed.tech/topics/ssh.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Script](<https://devfeed.tech/topics/script.md>), [Server](<https://devfeed.tech/topics/server.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [netlab](<https://devfeed.tech/tags/netlab.md>), [script](<https://devfeed.tech/tags/script.md>), [server](<https://devfeed.tech/tags/server.md>), [ssh](<https://devfeed.tech/tags/ssh.md>)

### AI overview

This tutorial shows how to use netlab status and jq in a Bash alias to return to the directory of a lab after reconnecting to a netlab server following an SSH session loss.

### Source excerpt

I work on a laptop that loves to power down when not used (the right thing to do), which often breaks the SSH session to my netlab server (not so good). Reconnecting is trivial. Figuring out which lab I was working on and where it lives on the disk after a few hours? That's the annoying part. We solved most of that ages ago with the netlab status --all command. It shows all running labs1 and their directories, so you can quickly jump back to where you were. However, even that gets tedious the 100th time you have to do it. Read more ...

## The Complex Beauty of Bash and n8n in Media Conversion

DevFeed: [The Complex Beauty of Bash and n8n in Media Conversion](<https://devfeed.tech/articles/the-complex-beauty-of-bash-and-n8n-in-media-conversion-10739.md>)

Original publisher: [Read original article](<https://noted.lol/self-running-video-encoder-bash-n8n/>)

Author: Jeremy

Published: 2026-02-12T16:17:00Z

Content type: tutorial

Language: en

Sources: [Noted](<https://devfeed.tech/sources/noted.md>)

Topics: [Homelab](<https://devfeed.tech/topics/homelab.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Compression](<https://devfeed.tech/topics/compression.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Processes](<https://devfeed.tech/topics/processes.md>), [cURL](<https://devfeed.tech/topics/curl.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [bash](<https://devfeed.tech/tags/bash.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [compression](<https://devfeed.tech/tags/compression.md>), [homelab](<https://devfeed.tech/tags/homelab.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [json](<https://devfeed.tech/tags/json.md>), [logs](<https://devfeed.tech/tags/logs.md>), [n8n](<https://devfeed.tech/tags/n8n.md>), [process](<https://devfeed.tech/tags/process.md>), [storage](<https://devfeed.tech/tags/storage.md>)

### AI overview

A hands-on homelab project combining a Bash script with an n8n workflow to find non-MP4 videos, convert them to MP4, log results, and send reports for storage or automation. It covers configuration, cleanup, command-line controls, parallel workers, notifications, file validation, and bitrate reduction.

### Source excerpt

Learn a hands on n8n homelab project that automates media conversion, frees up space with smart compression and cleanup, and gives you a fun rainy day tinkering task.

## From Bash to Bliss: Scaling Vespa Operations with Temporal

DevFeed: [From Bash to Bliss: Scaling Vespa Operations with Temporal](<https://devfeed.tech/articles/from-bash-to-bliss-scaling-vespa-operations-with-temporal-20444.md>)

Original publisher: [Read original article](<https://vinted.engineering//2026/01/21/from-bash-to-bliss-scaling-vespa-operations-with-temporal/>)

Author: Martynas Jakimčikas

Published: 2026-01-21T00:00:00Z

Content type: article

Language: en

Sources: [Vinted](<https://devfeed.tech/sources/vinted.md>)

Topics: [Platform Engineering](<https://devfeed.tech/topics/platform-engineering.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [health checks](<https://devfeed.tech/topics/health-checks.md>), [upgrade](<https://devfeed.tech/topics/upgrade.md>)

Tags: [automation](<https://devfeed.tech/tags/automation.md>), [commands](<https://devfeed.tech/tags/commands.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [health-checks](<https://devfeed.tech/tags/health-checks.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [platform](<https://devfeed.tech/tags/platform.md>), [scheduled](<https://devfeed.tech/tags/scheduled.md>), [script](<https://devfeed.tech/tags/script.md>), [self-service](<https://devfeed.tech/tags/self-service.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

This article describes how Vinted's platform team handled growing maintenance demands for its Vespa search infrastructure. As the environment expanded from hundreds to more than a thousand nodes and included many deployments, Bash scripts and Knife commands became difficult to manage. The team moved toward durable orchestration with Temporal, automated health checks, scheduled upgrades, and self-service guardrails.

### Source excerpt

Growing platform - Growing maintenance Keeping the Lights On (KTLO) is an essential, yet often taxing, part of a platform engineer's role. It represents the routine operational work required to keep the business running and the platform stable. For our team, this primarily involves maintenance on our search engine, Vespa - ranging from version upgrades and service restarts to draining traffic from nodes for hardware replacements.

## 10 scripts Bash útiles para sysadmins

DevFeed: [10 scripts Bash útiles para sysadmins](<https://devfeed.tech/articles/10-scripts-bash-utiles-para-sysadmins-34082.md>)

Original publisher: [Read original article](<https://tengoping.com/blog/scripts-bash-utiles-sysadmin/>)

Author: Alois

Published: 2026-01-14T00:00:00Z

Content type: tutorial

Language: es

Sources: [tengoping.com](<https://devfeed.tech/sources/tengoping-com.md>)

Topics: [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [backups](<https://devfeed.tech/topics/backups.md>), [monitor](<https://devfeed.tech/topics/monitor.md>), [rsync](<https://devfeed.tech/topics/rsync.md>)

Tags: [backups](<https://devfeed.tech/tags/backups.md>), [bash](<https://devfeed.tech/tags/bash.md>), [logs](<https://devfeed.tech/tags/logs.md>), [rsync](<https://devfeed.tech/tags/rsync.md>), [script](<https://devfeed.tech/tags/script.md>), [scripts](<https://devfeed.tech/tags/scripts.md>), [shell](<https://devfeed.tech/tags/shell.md>), [sysadmin](<https://devfeed.tech/tags/sysadmin.md>), [sysadmins](<https://devfeed.tech/tags/sysadmins.md>)

### AI overview

A Spanish-language tutorial presents ten practical Bash scripts for system administrators, including disk monitoring, rotating backups, log cleanup, and other routine tasks. It notes that Bash scripts suit focused tasks on individual machines but are not a replacement for configuration-management tools when managing many servers.

### Source excerpt

Colección de scripts Bash prácticos para monitorización, backups, limpieza de logs y tareas comunes de administración de sistemas.

## How to Add "Convert to GIF" to Thunar on Linux (XFCE)

DevFeed: [How to Add "Convert to GIF" to Thunar on Linux (XFCE)](<https://devfeed.tech/articles/how-to-add-convert-to-gif-to-thunar-on-linux-xfce-25163.md>)

Original publisher: [Read original article](<https://www.ivanmorgillo.com/2025/11/12/how-to-add-convert-to-gif-to-thunar-on-linux-xfce/>)

Author: Ivan Morgillo

Published: 2025-11-12T09:05:34Z

Content type: tutorial

Language: en

Sources: [Ivan Morgillo](<https://devfeed.tech/sources/ivan-morgillo.md>)

Topics: [FFmpeg (Fast Forward Moving Picture Experts Group)](<https://devfeed.tech/topics/ffmpeg.md>), [xfce](<https://devfeed.tech/topics/xfce.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>)

Tags: [custom-action](<https://devfeed.tech/tags/custom-action.md>), [ffmpeg](<https://devfeed.tech/tags/ffmpeg.md>), [gif](<https://devfeed.tech/tags/gif.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [script](<https://devfeed.tech/tags/script.md>), [shell](<https://devfeed.tech/tags/shell.md>), [shell-script](<https://devfeed.tech/tags/shell-script.md>), [thunar](<https://devfeed.tech/tags/thunar.md>), [video](<https://devfeed.tech/tags/video.md>), [xfce](<https://devfeed.tech/tags/xfce.md>)

### AI overview

A tutorial for adding a right-click Convert to GIF action to the Thunar file manager on Linux XFCE. It uses FFmpeg, Zenity, libnotify-bin, and a shell script to convert video files to GIFs.

### Source excerpt

Add a right-click Convert to GIF action to the Thunar file manager on Linux XFCE using FFmpeg and a shell script -- turn any video into a GIF in two clicks.

## How to Identify the Package Manager of a Linux System

DevFeed: [How to Identify the Package Manager of a Linux System](<https://devfeed.tech/articles/how-to-identify-the-package-manager-of-a-linux-system-4521.md>)

Original publisher: [Read original article](<https://feeds.feedblitz.com/~/921621143/0/baeldung/linux~How-to-Identify-the-Package-Manager-of-a-Linux-System>)

Author: Umara Mushtaq

Published: 2025-07-14T02:13:11Z

Content type: tutorial

Language: en

Sources: [Baeldung - Linux](<https://devfeed.tech/sources/baeldung-linux.md>)

Topics: [Package Management](<https://devfeed.tech/topics/package-management.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [apt](<https://devfeed.tech/topics/apt.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Ubuntu](<https://devfeed.tech/topics/ubuntu.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Debian](<https://devfeed.tech/topics/debian.md>), [Arch Linux](<https://devfeed.tech/topics/archlinux.md>), [dnf](<https://devfeed.tech/topics/dnf.md>), [Fedora](<https://devfeed.tech/topics/fedora.md>), [pacman](<https://devfeed.tech/topics/pacman.md>)

Tags: [apt](<https://devfeed.tech/tags/apt.md>), [automation](<https://devfeed.tech/tags/automation.md>), [bash](<https://devfeed.tech/tags/bash.md>), [debian](<https://devfeed.tech/tags/debian.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [dnf](<https://devfeed.tech/tags/dnf.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [errors](<https://devfeed.tech/tags/errors.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [installation](<https://devfeed.tech/tags/installation.md>), [linux](<https://devfeed.tech/tags/linux.md>), [linux-how-to](<https://devfeed.tech/tags/linux-how-to.md>), [package-management](<https://devfeed.tech/tags/package-management.md>), [package-management-scripting-apt-dnf-pacman-snap-yum](<https://devfeed.tech/tags/package-management-scripting-apt-dnf-pacman-snap-yum.md>), [pacman](<https://devfeed.tech/tags/pacman.md>), [scripting](<https://devfeed.tech/tags/scripting.md>), [snap](<https://devfeed.tech/tags/snap.md>), [ubuntu](<https://devfeed.tech/tags/ubuntu.md>)

### AI overview

This tutorial explains how to identify the package manager used by a Linux system. It covers inferring the manager from the distribution, checking distribution metadata with /etc/os-release or lsb_release, verifying an installed manager with which, and using Bash scripts to detect package managers in automated or multi-distribution environments.

### Source excerpt

Learn different ways to guess or identify the default package manager of a Linux system. The post How to Identify the Package Manager of a Linux System first appeared on Baeldung on Linux. Related Stories How to Check for Available Package Updates in Linux How to Properly Install Valgrind? Background Jobs in a Loop in Bash

## How to add a directory to your PATH

DevFeed: [How to add a directory to your PATH](<https://devfeed.tech/articles/how-to-add-a-directory-to-your-path-21118.md>)

Original publisher: [Read original article](<https://jvns.ca/blog/2025/02/13/how-to-add-a-directory-to-your-path/>)

Author: Julia Evans

Published: 2025-02-13T12:27:56Z

Content type: tutorial

Language: en

Sources: [Julia Evans](<https://devfeed.tech/sources/julia-evans.md>)

Topics: [Shell](<https://devfeed.tech/topics/shell.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Zsh](<https://devfeed.tech/topics/zsh.md>), [friendly interactive shell](<https://devfeed.tech/topics/fish.md>), [Linux](<https://devfeed.tech/topics/linux.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [config](<https://devfeed.tech/tags/config.md>), [files](<https://devfeed.tech/tags/files.md>), [flow](<https://devfeed.tech/tags/flow.md>), [gotchas](<https://devfeed.tech/tags/gotchas.md>), [history](<https://devfeed.tech/tags/history.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [mac](<https://devfeed.tech/tags/mac.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

A practical guide to adding a directory to PATH. It explains how to identify whether the shell is bash, zsh, or fish, find the relevant shell configuration file, determine which directory should be added, update the configuration, restart the shell, and troubleshoot common PATH-related problems.

### Source excerpt

I was talking to a friend about how to add a directory to your PATH today. It's something that feels "obvious" to me since I've been using the terminal for a long time, but when I searched for instructions for how to do it, I actually couldn't find something that explained all of the steps - a lot of them just said "add this to ~/.bashrc", but what if you're not using bash? What if your bash config is actually in a different file? And how are you supposed to figure out which directory to add anyway? So I wanted to try to write down some more complete directions and mention some of the gotchas I've run into over the years. Here's a table of contents: step 1: what shell are you using? step 2: find your shell's config file a note on bash's config file step 3: figure out which directory to add step 3.1: double check it's the right directory step 4: edit your shell config step 5: restart your shell problems: problem 1: it ran the wrong program problem 2: the program isn't being run from your shell problem 3: duplicate PATH entries making it harder to debug problem 4: losing your history after updating your PATH notes: a note on source a note on fish_add_path step 1: what shell are you using? If you're not sure what shell you're using, here's a way to find out. Run this: ps -p $$ -o pid,comm= if you're using bash, it'll print out 97295 bash if you're using zsh, it'll print out 97295 zsh if you're using fish, it'll print out an error like "In fish, please use $fish_pid" ($$ isn't valid syntax in fish, but in any case the error message tells you that you're using fish, which you probably already knew) Also bash is the default on Linux and zsh is the default on Mac OS (as of 2024). I'll only cover bash, zsh, and fish in these directions. step 2: find your shell's config file in zsh, it's probably ~/.zshrc in bash, it might be ~/.bashrc, but it's complicated, see the note in the next section in fish, it's probably ~/.config/fish/config.fish (you can run echo $__fish_config_di

## The power of extensive command history in Bash and Zsh

DevFeed: [The power of extensive command history in Bash and Zsh](<https://devfeed.tech/articles/the-power-of-extensive-command-history-in-bash-and-zsh-27706.md>)

Original publisher: [Read original article](<https://gagor.pro/2024/03/the-power-of-extensive-command-history-in-bash-and-zsh/>)

Author: Tom

Published: 2024-03-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [Tomasz Gągor](<https://devfeed.tech/sources/tomasz-gagor.md>)

Topics: [Zsh](<https://devfeed.tech/topics/zsh.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [bash-history](<https://devfeed.tech/tags/bash-history.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [extensive-command-history](<https://devfeed.tech/tags/extensive-command-history.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [linux-shell-tips](<https://devfeed.tech/tags/linux-shell-tips.md>), [macos](<https://devfeed.tech/tags/macos.md>), [macos-shell-tips](<https://devfeed.tech/tags/macos-shell-tips.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [shortcuts](<https://devfeed.tech/tags/shortcuts.md>), [terminal](<https://devfeed.tech/tags/terminal.md>), [terminal-productivity](<https://devfeed.tech/tags/terminal-productivity.md>), [zsh](<https://devfeed.tech/tags/zsh.md>), [zsh-history](<https://devfeed.tech/tags/zsh-history.md>)

### AI overview

This tutorial explains how to maintain and search extensive command history in Bash and Zsh to reduce repeated command lookups and improve terminal efficiency. It discusses history recall, fuzzy finding, and configuration considerations such as overly aggressive deduplication.

### Source excerpt

Learn how to leverage extensive command history in Bash and Zsh to improve your efficiency and productivity in the terminal.

## Terminal and Bash - Tips & Tricks

DevFeed: [Terminal and Bash - Tips & Tricks](<https://devfeed.tech/articles/terminal-and-bash-tips-tricks-31865.md>)

Original publisher: [Read original article](<https://www.metachris.dev/2024/01/terminal-and-bash-tips-tricks/>)

Author: Chris Hager

Published: 2024-01-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Chris Hager](<https://devfeed.tech/sources/chris-hager.md>)

Topics: [Terminal](<https://devfeed.tech/topics/terminal.md>), [Shell](<https://devfeed.tech/topics/shell.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [dotfiles](<https://devfeed.tech/topics/dotfiles.md>)

Tags: [aliases](<https://devfeed.tech/tags/aliases.md>), [bash](<https://devfeed.tech/tags/bash.md>), [iterm2](<https://devfeed.tech/tags/iterm2.md>), [macos](<https://devfeed.tech/tags/macos.md>), [setup](<https://devfeed.tech/tags/setup.md>), [shell](<https://devfeed.tech/tags/shell.md>), [terminal](<https://devfeed.tech/tags/terminal.md>), [tips](<https://devfeed.tech/tags/tips.md>), [tricks](<https://devfeed.tech/tags/tricks.md>)

### AI overview

A collection of practical notes and tips for setting up and using iTerm2 and Bash on macOS. It covers terminal navigation, profiles, panes and tabs, Bash as the default shell, dotfiles, shell history, fuzzy search, aliases, and helper functions.

### Source excerpt

A collection of notes, tips and tricks about how I setup and use my terminal (iTerm2) and shell (Bash). Perhaps you find some of it useful or interesting for your own setup.

## Keyboard shortcuts for Export Unmodified Original in Photos for Mac

DevFeed: [Keyboard shortcuts for Export Unmodified Original in Photos for Mac](<https://devfeed.tech/articles/keyboard-shortcuts-for-export-unmodified-original-in-photos-for-mac-21721.md>)

Original publisher: [Read original article](<https://oleb.net/2023/photos-keyboard-shortcuts/>)

Author: Ole Begemann

Published: 2023-03-21T21:42:04Z

Content type: tutorial

Language: en

Sources: [Ole Begemann](<https://devfeed.tech/sources/ole-begemann.md>)

Topics: [macOS](<https://devfeed.tech/topics/macos.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Script](<https://devfeed.tech/topics/script.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [commands](<https://devfeed.tech/tags/commands.md>), [keyboard](<https://devfeed.tech/tags/keyboard.md>), [mac](<https://devfeed.tech/tags/mac.md>), [script](<https://devfeed.tech/tags/script.md>), [shortcuts](<https://devfeed.tech/tags/shortcuts.md>)

### AI overview

This tutorial explains how to assign a keyboard shortcut to Photos.app's Export Unmodified Original command on macOS. It provides a Bash script that configures the shortcut for selections of up to 20 photos, videos, or mixed items, and notes a macOS 13.2 bug requiring the relevant menu to be opened once first.

### Source excerpt

Problem The Photos app on macOS doesn't provide a keyboard shortcut for the Export Unmodified Original command. macOS allows you to add your own app-specific keyboard shortcuts via System Settings > Keyboard > Keyboard Shortcuts > App Shortcuts. You need to enter the exact spelling of the menu item you want to invoke. Photos renames the command depending on what's selected: Export Unmodified Original For 1 Photo" turns into "... Originals For 2 Videos" turns into "... For 3 Items" (for mixed selections), and so on. Argh! The System Settings UI for assigning keyboard shortcuts is extremely tedious to use if you want to add more than one or two shortcuts. Dynamically renaming menu commands is cute, but it becomes a problem when you want to assign keyboard shortcuts. Solution: shell script Here's a Bash script1 that assigns Ctrl + Opt + Cmd + E to Export Unmodified Originals for up to 20 selected items: #!/bin/bash # Assigns a keyboard shortcut to the Export Unmodified Originals # menu command in Photos.app on macOS. # @ = Command # ^ = Control # ~ = Option # $ = Shift shortcut='@~^e' # Set shortcut for 1 selected item echo "Setting shortcut for 1 item" defaults write com.apple.Photos NSUserKeyEquivalents -dict-add "Export Unmodified Original For 1 Photo" "$shortcut" defaults write com.apple.Photos NSUserKeyEquivalents -dict-add "Export Unmodified Original For 1 Video" "$shortcut" # Set shortcut for 2-20 selected items objects=(Photos Videos Items) for i in {2..20} do echo "Setting shortcut for $i items" for object in "${objects[@]}" do defaults write com.apple.Photos NSUserKeyEquivalents -dict-add "Export Unmodified Originals For $i $object" "$shortcut" done done # Use this command to verify the result: # defaults read com.apple.Photos NSUserKeyEquivalents The script is also available on GitHub. Usage: Quit Photos.app. Run the script. Feel free to change the key combo or count higher than 20. Open Photos.app. Note: There's a bug in Photos.app on macOS 13.2 (and at least s

## NuShell - When /bin/bash curl installs fail

DevFeed: [NuShell - When /bin/bash curl installs fail](<https://devfeed.tech/articles/nushell-when-bin-bash-curl-installs-fail-28204.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/nushell/2022/07/09/nushell-when-bin-bash-curl-installs-fail.html>)

Author: Fuzzygroup

Published: 2022-07-09T02:57:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [cURL](<https://devfeed.tech/topics/curl.md>), [Homebrew](<https://devfeed.tech/topics/homebrew.md>), [Perl](<https://devfeed.tech/topics/perl.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [curl](<https://devfeed.tech/tags/curl.md>), [homebrew](<https://devfeed.tech/tags/homebrew.md>), [nushell](<https://devfeed.tech/tags/nushell.md>), [perl](<https://devfeed.tech/tags/perl.md>), [rust](<https://devfeed.tech/tags/rust.md>), [script](<https://devfeed.tech/tags/script.md>)

### AI overview

The author reports that several commands and scripts failed when run directly in NuShell, including Homebrew install and uninstall commands. The suggested workaround is to start a /bin/bash session from NuShell, run the needed commands there, and type exit to return to NuShell.

### Source excerpt

I've liked the concept of NuShell since I first heard about it. I then liked it more when I discovered that Yehuda Katz was involved since I strongly believe in picking software based on the pedigree of the engineers involved (no I don't - yet - have engineer trading cards but I'm thinking about it). Although I have NuShell running on my experimental system, I've held off on using it on my main box mostly due to concerns about the vast amounts of things that pipe crap to /bin/bash like this: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /usr/bin/find "$(brew --prefix)/Caskroom/"*'/.metadata' -type f -name '*.rb' -print0 | /usr/bin/xargs -0 /usr/bin/perl -i -0pe 's/depends_on macos: \[.*?\]//gsm;s/depends_on macos: .*//g' That's an uninstall script, an install script and a find command. I tried all of these tonight on NuShell and they all failed. An example of this is: /Users/sjohnson/Sync/coding〉/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /bin/bash: #!/bin/bash: No such file or directory /Users/sjohnson/Sync/coding〉 Note: For non NuShell users, you can tell its NuShell above by the greater than sign in the prompt. And then it struck me - I can likely simply execute /bin/bash from within NuShell and THEN run whatever I need to in bash. I tried it and it worked perfectly. So if you have problems with things that don't work on NuShell, try spinning up a /bin/bash session. After you're done, type exit and you are back in NuShell.

## Forge: Site Commands

DevFeed: [Forge: Site Commands](<https://devfeed.tech/articles/forge-site-commands-3685.md>)

Original publisher: [Read original article](<https://laravel.com/blog/forge-site-commands>)

Author: James Brooks

Published: 2021-03-30T08:23:00Z

Content type: release

Language: en

Sources: [Laravel Blog](<https://devfeed.tech/sources/laravel-blog.md>)

Topics: [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Script](<https://devfeed.tech/topics/script.md>), [Laravel](<https://devfeed.tech/topics/laravel.md>), [PHP](<https://devfeed.tech/topics/php.md>), [servers](<https://devfeed.tech/topics/servers.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [Redis](<https://devfeed.tech/topics/redis.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [laravel](<https://devfeed.tech/tags/laravel.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [php](<https://devfeed.tech/tags/php.md>), [redis](<https://devfeed.tech/tags/redis.md>), [server](<https://devfeed.tech/tags/server.md>), [servers](<https://devfeed.tech/tags/servers.md>), [sign-up](<https://devfeed.tech/tags/sign-up.md>), [video](<https://devfeed.tech/tags/video.md>), [youtube](<https://devfeed.tech/tags/youtube.md>)

### AI overview

Laravel Forge introduces a Commands panel for running one-off Bash commands from a site's directory as the correct user. It records the ten most recent commands, the initiating user, status, output, and failures based on non-zero exit codes.

### Source excerpt

Forge has had the ability to execute arbitrary Bash scripts on your server via Recipes for some time now. However, sometimes you may just need to run a quick command without the overhead of creating a...

## Capturing Script Logs

DevFeed: [Capturing Script Logs](<https://devfeed.tech/articles/capturing-script-logs-19827.md>)

Original publisher: [Read original article](<https://tech.gc.com/capturing-script-logs/>)

Author: GameChanger

Published: 2020-12-01T00:00:00Z

Content type: tutorial

Language: en

Sources: [GameChanger](<https://devfeed.tech/sources/gamechanger.md>)

Topics: [Script](<https://devfeed.tech/topics/script.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Processes](<https://devfeed.tech/topics/processes.md>), [Ansible](<https://devfeed.tech/topics/ansible.md>), [Slack](<https://devfeed.tech/topics/slack.md>), [SIEM, Security, Observability](<https://devfeed.tech/topics/siem-security-observability.md>)

Tags: [ansible](<https://devfeed.tech/tags/ansible.md>), [bash](<https://devfeed.tech/tags/bash.md>), [dev](<https://devfeed.tech/tags/dev.md>), [logs](<https://devfeed.tech/tags/logs.md>), [metrics](<https://devfeed.tech/tags/metrics.md>), [monitor](<https://devfeed.tech/tags/monitor.md>), [operations](<https://devfeed.tech/tags/operations.md>), [process](<https://devfeed.tech/tags/process.md>), [slack](<https://devfeed.tech/tags/slack.md>)

### AI overview

This tutorial explains how GameChanger captures script output and reports errors to Slack when DataDog integration is unavailable or its alerts lack sufficient context. It introduces the Bash tee command and process substitution as building blocks for capturing and forwarding script logs.

### Source excerpt

At GameChanger, we use scripts in many of our flows such as during deploys or running Ansible while booting new instances. Some of these flows are critical to our operations and require good visibility. Traditionally we tried to send both metrics and logs to DataDog where we can both monitor what scripts are doing and set alerts on various metrics. DataDog integration, however, is not always available such as during the instance boot. In addition, sometimes a DataDog alert does not provide enough context of what failed and most importantly why it failed. It simply states that some threshold was reached. To investigate the issue requires more manual steps by looking for the appropriate log which is not always intuitive. That is why recently at GameChanger we started integrating Slack error reporting directly into some of our critical scripts. This post describes the exact mechanism of how that is achieved since it uses a really cool bash trick. Useful Commands First some background on some of the useful commands. tee Anyone? Tee is a really useful command. It captures an output from a script and both echoes it to standard out as well as forwards it to a file. This allows to both see an output as well as capture the same output for later use. For example: $ echo hello there | tee hello.log hello there $ cat hello.log hello there Process Substitution Some commands only work with files. For example a classic diff: $ echo one > one.txt $ echo two > two.txt $ diff -u one.txt two.txt --- one.txt +++ two.txt @@ -1 +1 @@ -one +two Sometimes however it is convenient to be able to refer to an output of commands as a file without manually creating a temporary file. This is what process substitution allows to do. Same example as above but with process substitution: $ diff -u <(echo one) <(echo two) --- /dev/fd/63 2020-11-30 12:33:08.539905663 -0500 +++ /dev/fd/62 2020-11-30 12:33:08.540272967 -0500 @@ -1 +1 @@ -one +two This is the output form of process substitution which uses

## Mining your CLI history for good git aliases

DevFeed: [Mining your CLI history for good git aliases](<https://devfeed.tech/articles/mining-your-cli-history-for-good-git-aliases-19058.md>)

Original publisher: [Read original article](<https://httptoolkit.com/blog/find-best-git-aliases/>)

Author: HTTP Toolkit; Tim Perry

Published: 2020-11-30T13:35:00Z

Content type: tutorial

Language: en

Sources: [HTTP Toolkit](<https://devfeed.tech/sources/http-toolkit.md>)

Topics: [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Git](<https://devfeed.tech/topics/git.md>), [Shell](<https://devfeed.tech/topics/shell.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [cli](<https://devfeed.tech/tags/cli.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [commands](<https://devfeed.tech/tags/commands.md>), [git](<https://devfeed.tech/tags/git.md>), [git-commit](<https://devfeed.tech/tags/git-commit.md>), [master](<https://devfeed.tech/tags/master.md>)

### AI overview

This tutorial shows how to analyze shell history to identify frequently used Git commands and choose useful Git aliases. It demonstrates filtering, sorting, counting repeated commands, and grouping command prefixes to account for variable arguments.

### Source excerpt

If you use the command-line all day, CLI improvements can add a huge boost to your workflow. One of the simplest ways to improve things is to make your most used commands easier & faster to type, by creating aliases. But which aliases? Which commands are most important for your usage? You can probably guess a couple, but it's hard to know for sure, and there's plenty you'll miss. Fortunately your CLI history already has all the answers, if you just know how to ask. As a software developer I'm going to focus on git aliases here, but this applies equally well to any command-line tools you use heavily. I'm also assuming a bash-compatible shell, but the same concept should translate elsewhere easily enough. The first step is to use history to do some digging and find out what commands you run most frequently. history prints every line you've run recently in your shell, in chronological order. That gives us the data we need, and with a little bash-fu we can start to get some answers. First, what're your most run git commands? history -n | grep git | sort | uniq -c | sort -k1,1nr -k2 That takes your history, filters for git commands, sorts them alphabetically, counts the repeated lines, and then sorts by the repeat count. You can add a | head -n X too, if you'd like to see just the top X results. For me, with a few weeks history on a new laptop, that looks like: 543 git status 272 git add -p 214 git tree 71 git diff 55 git commit --amend 53 git push origin master 32 git checkout -p 30 git reset 27 git stash pop 26 git stash That tells you a bunch about my git workflow already! These are all common commands I'm using frequently, and commands I should very seriously consider aliasing. It doesn't tell the whole story though. How come git commit --amend is so high up, but git commit doesn't appear at all? That's because for many commits I run git commit -m "..." to commit and pass a message inline, so each of those commands is treated as unique, and won't appear in this top l

## Getting Past Bash Argument list too long

DevFeed: [Getting Past Bash Argument list too long](<https://devfeed.tech/articles/getting-past-bash-argument-list-too-long-28128.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/bash/2020/06/25/getting-past-bash-argument-list-too-long.html>)

Author: Fuzzygroup

Published: 2020-06-25T00:00:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Bash](<https://devfeed.tech/topics/bash.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Unix](<https://devfeed.tech/topics/unix.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [files](<https://devfeed.tech/tags/files.md>), [linux](<https://devfeed.tech/tags/linux.md>), [root](<https://devfeed.tech/tags/root.md>), [ubuntu](<https://devfeed.tech/tags/ubuntu.md>), [unix](<https://devfeed.tech/tags/unix.md>)

### AI overview

A Bash article explains how to handle operations on a directory containing about 750,000 files without exceeding the shell's argument-list limit. It shows that using the current-directory operand for chown avoids wildcard expansion and uses find with -exec to move JSON files individually.

### Source excerpt

Right now I have a directory with about 750,000 odd files in it and any attempt to manipulate the files results in this: root@ip-172-31-1-219:~/datastreamer/data# mv * /home/ubuntu/data/data bash: /bin/mv: Argument list too long My first challenge was to do this: chown ubuntu:ubuntu * And the fix for this one was actually easy: chown ubuntu:ubuntu . By omitting the *, the bash limits on argument list don't apply - this changes the current folder (.) and everything in it and it always works. The second challenge was to move the files from /root/datastreamer/data to /home/ubuntu/data/data. Here's the solution after a bit of research: find /root/datastreamer/data -name '*.json' -exec mv {} /home/ubuntu/data/data \; Reference: Unix.StackExchange StackOverflow

## Scripting file templates for Android Studio

DevFeed: [Scripting file templates for Android Studio](<https://devfeed.tech/articles/scripting-file-templates-for-android-studio-25657.md>)

Original publisher: [Read original article](<https://adambennett.dev/2020/03/scripting-file-templates-for-android-studio/>)

Published: 2020-03-10T09:31:04Z

Content type: tutorial

Language: en

Sources: [Posts on Adam Bennett](<https://devfeed.tech/sources/posts-on-adam-bennett.md>)

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Boilerplate](<https://devfeed.tech/topics/boilerplate.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [jetbrains-toolbox](<https://devfeed.tech/topics/jetbrains-toolbox.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [automated](<https://devfeed.tech/tags/automated.md>), [bash](<https://devfeed.tech/tags/bash.md>), [blog](<https://devfeed.tech/tags/blog.md>), [career](<https://devfeed.tech/tags/career.md>), [compose](<https://devfeed.tech/tags/compose.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [files](<https://devfeed.tech/tags/files.md>), [finance](<https://devfeed.tech/tags/finance.md>), [formatting](<https://devfeed.tech/tags/formatting.md>), [functional](<https://devfeed.tech/tags/functional.md>), [github](<https://devfeed.tech/tags/github.md>), [growth](<https://devfeed.tech/tags/growth.md>), [install](<https://devfeed.tech/tags/install.md>), [java](<https://devfeed.tech/tags/java.md>), [jetbrains-toolbox](<https://devfeed.tech/tags/jetbrains-toolbox.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [money](<https://devfeed.tech/tags/money.md>), [onboarding](<https://devfeed.tech/tags/onboarding.md>), [opinions](<https://devfeed.tech/tags/opinions.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [script](<https://devfeed.tech/tags/script.md>), [scripting](<https://devfeed.tech/tags/scripting.md>), [software](<https://devfeed.tech/tags/software.md>), [startups](<https://devfeed.tech/tags/startups.md>), [team](<https://devfeed.tech/tags/team.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [training](<https://devfeed.tech/tags/training.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This tutorial explains how Cuvva automated installing Android Studio file templates for team members across standard and JetBrains Toolbox installations. It also describes combining the setup with scripts that configure ktlint formatting, code style, and pre-commit hooks to streamline developer onboarding.

### Source excerpt

As we've started locking down our architecture at Cuvva we reached a point where every new feature required very similar boilerplate, and building all of this by hand was getting tedious. The obvious solution here was to create file templates using Android Studio. I won't go into much detail as to how these are made (there's some good resources available for this already), but I wanted to quickly share how we automated setting these up for team members.

## How to alias and navigate to directories with autocomplete in Linux

DevFeed: [How to alias and navigate to directories with autocomplete in Linux](<https://devfeed.tech/articles/how-to-alias-and-navigate-to-directories-with-autocomplete-in-linux-37445.md>)

Original publisher: [Read original article](<https://iridakos.com/programming/2019/04/10/shell-navigation-with-autocomplete>)

Author: Lazarus Lazaridis

Published: 2019-04-10T13:00:00Z

Content type: tutorial

Language: en

Sources: [Lazarus Lazaridis](<https://devfeed.tech/sources/lazarus-lazaridis.md>)

Topics: [Shell](<https://devfeed.tech/topics/shell.md>), [Script](<https://devfeed.tech/topics/script.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Utility Software](<https://devfeed.tech/topics/utility.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>)

Tags: [aliases](<https://devfeed.tech/tags/aliases.md>), [bash](<https://devfeed.tech/tags/bash.md>), [completion](<https://devfeed.tech/tags/completion.md>), [directory](<https://devfeed.tech/tags/directory.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [installation](<https://devfeed.tech/tags/installation.md>), [linux](<https://devfeed.tech/tags/linux.md>), [opensource](<https://devfeed.tech/tags/opensource.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [programming](<https://devfeed.tech/tags/programming.md>), [script](<https://devfeed.tech/tags/script.md>), [scripts](<https://devfeed.tech/tags/scripts.md>), [shell](<https://devfeed.tech/tags/shell.md>), [tools](<https://devfeed.tech/tags/tools.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This tutorial introduces goto, a shell utility for navigating to registered directory aliases with autocomplete. It explains installation, alias management, navigation, cleanup, help, version commands, and directory-stack features.

### Source excerpt

I use the terminal a lot and in my day to day work I tend to navigate to the same bunch of directories. There are some awesome tools out there (like autojump or z) but sometimes, especially when the directories are similarly named, there is a need to be explicit to navigate to the proper one. I decided to write a script to overcome this issue and to avoid having to edit my .bash* files to manage aliases each time I wanted to add or remove a directory. goto goto is a shell utility to quickly navigate to aliased directories with autocomplete (tab completion). goto repo at GitHub User registers directory aliases, for example: goto --register dev /home/iridakos/development and then cds to that directory with: goto dev Find below documentation on the script but make sure you check the script's documentation page for updates. Sorry for the name, I know it brings back memories but it's not what it seems :) Installation To install goto all you have to do is clone the repository locally: git clone https://github.com/iridakos/goto.git navigate to it cd goto and execute: sudo ./install You need to restart your shell after installation. Usage Change to an aliased directory Register an alias Unregister an alias List aliases Expand an alias Cleanup Help Version Extras Push before changing directories Revert to a pushed directory Change to an aliased directory To change to an aliased directory, type: goto <alias> Example goto dev Register an alias To register a directory alias, type: goto -r <alias> <directory> or goto --register <alias> <directory> Example goto -r blog /mnt/external/projects/html/blog or goto --register blog /mnt/external/projects/html/blog Notes goto expands the directories hence you can easily alias your current directory with: goto -r last_release . and it will automatically be aliased to the whole path. Pressing the tab key after the alias name, you have the default directory suggestions by the shell. Unregister an alias To unregister an alias, use: goto -u <

## Director of Engineering, Lawrence Mandel Talks Road to Leadership, Growth, and Finding Balance.

DevFeed: [Director of Engineering, Lawrence Mandel Talks Road to Leadership, Growth, and Finding Balance.](<https://devfeed.tech/articles/director-of-engineering-lawrence-mandel-talks-road-to-leadership-growth-and-finding-balance-1373.md>)

Original publisher: [Read original article](<https://shopify.engineering/director-of-engineering-lawrence-mandel-talks-road-to-leadership-growth-and-finding-balance>)

Author: Toni Akinwumi

Published: 2018-12-03T21:12:00Z

Content type: article

Language: en

Sources: [Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering.md>), [Shopify Engineering - Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering-shopify-engineering.md>)

Topics: [Shopify](<https://devfeed.tech/topics/shopify.md>), [Production Engineering](<https://devfeed.tech/topics/production-engineering.md>), [Swing](<https://devfeed.tech/topics/swing.md>), [MediaWiki](<https://devfeed.tech/topics/mediawiki.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [XML](<https://devfeed.tech/topics/xml.md>), [ibm](<https://devfeed.tech/topics/ibm.md>), [Mozilla](<https://devfeed.tech/topics/mozilla.md>)

Tags: [apache](<https://devfeed.tech/tags/apache.md>), [automation](<https://devfeed.tech/tags/automation.md>), [developer](<https://devfeed.tech/tags/developer.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [eclipse](<https://devfeed.tech/tags/eclipse.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [growth](<https://devfeed.tech/tags/growth.md>), [ibm](<https://devfeed.tech/tags/ibm.md>), [java](<https://devfeed.tech/tags/java.md>), [leadership](<https://devfeed.tech/tags/leadership.md>), [mozilla](<https://devfeed.tech/tags/mozilla.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [production-engineering](<https://devfeed.tech/tags/production-engineering.md>), [projects](<https://devfeed.tech/tags/projects.md>), [shopify](<https://devfeed.tech/tags/shopify.md>), [software](<https://devfeed.tech/tags/software.md>), [software-developer](<https://devfeed.tech/tags/software-developer.md>), [tools](<https://devfeed.tech/tags/tools.md>), [web-applications](<https://devfeed.tech/tags/web-applications.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

This interview profiles Lawrence Mandel, a Director of Production Engineering at Shopify who leads the Developer Acceleration team. It discusses the team's work building tools, conventions, documentation, and automation for developers; Mandel's experience at IBM and Mozilla; his open-source projects and Java web application work; and his views on career growth, leadership, time management, family, health, and work.

### Source excerpt

Lawrence Mandel is a Director of Production Engineering leading Shopify's Developer Acceleration team and has been at Shopify for over a year. He previously worked at IBM and Mozilla where he started as a software developer before transitioning into leadership roles. Through all his work experience, he's learned to understand the meaning of time management and to prioritize the most important things in his life, which are his family, health, and work.

## Small Mac apps I love

DevFeed: [Small Mac apps I love](<https://devfeed.tech/articles/small-mac-apps-i-love-37354.md>)

Original publisher: [Read original article](<https://muffinman.io/blog/small-mac-apps-i-love/>)

Author: Stanko

Published: 2018-05-09T00:00:00Z

Content type: opinion

Language: en

Sources: [Stanko Tadić](<https://devfeed.tech/sources/stanko-tadic.md>)

Topics: [App](<https://devfeed.tech/topics/app.md>), [Tool](<https://devfeed.tech/topics/tool.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Bash](<https://devfeed.tech/topics/bash.md>)

Tags: [application](<https://devfeed.tech/tags/application.md>), [apps](<https://devfeed.tech/tags/apps.md>), [bash](<https://devfeed.tech/tags/bash.md>), [features](<https://devfeed.tech/tags/features.md>), [free](<https://devfeed.tech/tags/free.md>), [oh-my-zsh](<https://devfeed.tech/tags/oh-my-zsh.md>), [shortcuts](<https://devfeed.tech/tags/shortcuts.md>), [tools](<https://devfeed.tech/tags/tools.md>), [window](<https://devfeed.tech/tags/window.md>)

### AI overview

A personal list of small Mac applications and Bash tools, including utilities for uninstalling apps, clipboard management, Touch Bar feedback, calendar access, window management, archive extraction, Finder enhancements, Bash customization, and directory navigation.

### Source excerpt

Recently I switched to a new laptop and had to set it up to my likings.This comic describes my setup pretty accurately. My setup includes a bunch of small apps I found over the years. It seems that most people are not aware of these, so I decided to share a list. All of them are free (with the exception of TotalFinder), and if you like them, consider donating to authors. So here they are in the alphabetical order: AppCleaner # AppCleaner website AppCleaner is a small application which allows you to thoroughly uninstall unwanted apps. CopyClip # CopyClip website Simple clipboard manager, stores what you copied allowing you to quickly find it. HapticKey # HapticKey website This is a weird one. I already ranted about the touch bar, and this app makes it a little bit more bearable. Tapping on touch bar will make your trackpad vibrate(?!) to give you haptic feedback. Give it a try and decide for yourself. Itsycal # Itsycal website If you ever were annoyed by the fact Mac has no built-in calendar in the menu bar, you'll love Itsycal. It is a tiny calendar with option to show your calendar events. By default it displays small calendar icon, with current date in it. Custom date formats are supported as well, allowing you replace Mac's clock completely. Spectacle # Spectacle website Simple window manager - move windows around, across workspaces, resize them. All that by using using customizable global shortcuts. The Unarchiver # The Unarchiver website Well, this is probably the most popularI just realized Unarchiver was acquired by MacPaw, hopefully they'll keep it free and simple. on this list. Unarchiver does exactly what it's name suggests. It supports all of the archive formats you'll ever need. TotalFinder ($12.00) # TotalFinder website I always felt Finder is missing a lot of features. TotalFinder and XtraFinder both fix that to an extent, by adding things like tabs, dual mode, cut and more. There is a catch - both application require system tweak to install. You need

## How we got rid of 5k lines of our bash release process

DevFeed: [How we got rid of 5k lines of our bash release process](<https://devfeed.tech/articles/how-we-got-rid-of-5k-lines-of-our-bash-release-process-27954.md>)

Original publisher: [Read original article](<https://tech.trivago.com/post/2017-10-16-boerewors/>)

Author: Olaf Gladis Follow

Published: 2017-10-16T00:00:00Z

Content type: article

Language: en

Sources: [Trivago](<https://devfeed.tech/sources/trivago.md>)

Topics: [releases](<https://devfeed.tech/topics/releases.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Development](<https://devfeed.tech/topics/development.md>), [Server](<https://devfeed.tech/topics/server.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [development](<https://devfeed.tech/tags/development.md>), [devops](<https://devfeed.tech/tags/devops.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [load-balancer](<https://devfeed.tech/tags/load-balancer.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [redis](<https://devfeed.tech/tags/redis.md>), [release](<https://devfeed.tech/tags/release.md>), [release-engineering](<https://devfeed.tech/tags/release-engineering.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [server](<https://devfeed.tech/tags/server.md>)

### AI overview

A trivago engineer describes replacing a fragile Bash-based release process. The article covers OPcache warmup failures, manual server recovery, and the legacy deployment tool's maintenance, validation, coupling, and testing problems.

### Source excerpt

When I joined trivago a year ago we had problems with our releases. Read how we were able to switch from our bash release process to a new one.

## One-off shell script execution in BBEdit

DevFeed: [One-off shell script execution in BBEdit](<https://devfeed.tech/articles/one-off-shell-script-execution-in-bbedit-35131.md>)

Original publisher: [Read original article](<http://www.practicallyefficient.com/2017/06/14/shell-scripts-in-bbedit.html>)

Author: Eddie Smith

Published: 2017-06-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [Eddie Smith](<https://devfeed.tech/sources/eddie-smith.md>)

Topics: [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Sublime Text](<https://devfeed.tech/topics/sublime-text.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [file](<https://devfeed.tech/topics/file.md>), [LaTeX](<https://devfeed.tech/topics/latex.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [chmod](<https://devfeed.tech/tags/chmod.md>), [command](<https://devfeed.tech/tags/command.md>), [commands](<https://devfeed.tech/tags/commands.md>), [copy](<https://devfeed.tech/tags/copy.md>), [editor](<https://devfeed.tech/tags/editor.md>), [execution](<https://devfeed.tech/tags/execution.md>), [file](<https://devfeed.tech/tags/file.md>), [files](<https://devfeed.tech/tags/files.md>), [mac](<https://devfeed.tech/tags/mac.md>), [multiple](<https://devfeed.tech/tags/multiple.md>), [script](<https://devfeed.tech/tags/script.md>), [shell](<https://devfeed.tech/tags/shell.md>), [shell-script](<https://devfeed.tech/tags/shell-script.md>)

### AI overview

The article describes a workflow for creating one-off Bash scripts in Sublime Text to copy selected files, then running the unsaved commands immediately in BBEdit.

### Source excerpt

I've been meaning to talk more about my "Sublime Text and BBEdit" workflow, and this is a powerful (if mundane) example. I don't write a ton of scripts on my Mac and generally don't spend much time in Terminal. But when I need a script, I really need a script. My work is very file-heavy. I juggle large numbers of .tex (LaTeX) files across several large folder structures. Every so often I need to copy a subset of files within one folder to another folder so that I can do things to them. In most cases, I have a list of the files in a plain text .tex file, and I just need to do some file operations on them. Selecting them individually in Finder is tedious and error-prone, so the solution is usually a simple bash script with a bunch of cp commands. The main friction with bash scripting for folks like me that don't live in Terminal is that you have to create a .sh script and then web search for now to make it executable (because I can never remember the chmod command). Creating the shell commands is straightforward, especially in Sublime Text. After adding the necessary #!/bin/bash line with TextExpander and defining the "to" and "from" file paths as variables, the magic of Sublime Text's multiple cursors makes it easy to put cp commands and the folder path variables around each file to be copied. Sublime Text multiple cursors in action Since Sublime Text won't execute these commands in an unsaved file that hasn't been given proper execute permissions, I simply copy this text into an untitled, unsaved BBEdit window and hit ⌘R. BBEdit has the extremely useful ability to immediately recognize the syntax and execute it right there on the spot. I realize this post is a weird way to promote BBEdit, which is a powerful text editor that, in this case, I'm not even using as an editor. Hopefully I'll find some time to talk more about other ways I'm using it with Sublime Text.

## When Bash Scripts Bite

DevFeed: [When Bash Scripts Bite](<https://devfeed.tech/articles/when-bash-scripts-bite-20238.md>)

Original publisher: [Read original article](<https://blog.janestreet.com/when-bash-scripts-bite/>)

Author: Todd Lubin

Published: 2017-05-11T00:00:00Z

Content type: article

Language: en

Sources: [Jane Street](<https://devfeed.tech/sources/jane-street.md>)

Topics: [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [code](<https://devfeed.tech/tags/code.md>), [commands](<https://devfeed.tech/tags/commands.md>), [script](<https://devfeed.tech/tags/script.md>)

### AI overview

The article examines subtle failure modes of Bash's -e flag, including cases where commands do not cause a script to exit and where the flag is not passed to subshells in command substitutions. It argues that production shell scripts still require explicit reasoning about failure conditions.

### Source excerpt

There are abundant resources online trying to scare programmers away from using shell scripts. Most of them, if anything, succeed in convincing the reader to blindly put something that resembles

## Mobile Testing & Local Dev Sharing with Homestead

DevFeed: [Mobile Testing & Local Dev Sharing with Homestead](<https://devfeed.tech/articles/mobile-testing-local-dev-sharing-with-homestead-31283.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/mobile-testing-local-dev-sharing-with-homestead>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2017-05-06T18:55:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Mobile Testing](<https://devfeed.tech/topics/mobile-testing.md>), [Vagrant](<https://devfeed.tech/topics/vagrant.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Development](<https://devfeed.tech/topics/development.md>), [OpenSSH](<https://devfeed.tech/topics/openssh.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>)

Tags: [environment](<https://devfeed.tech/tags/environment.md>), [fantastic](<https://devfeed.tech/tags/fantastic.md>), [here-s](<https://devfeed.tech/tags/here-s.md>), [homestead](<https://devfeed.tech/tags/homestead.md>), [hood](<https://devfeed.tech/tags/hood.md>), [insights](<https://devfeed.tech/tags/insights.md>), [local](<https://devfeed.tech/tags/local.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-testing](<https://devfeed.tech/tags/mobile-testing.md>), [ngrok](<https://devfeed.tech/tags/ngrok.md>), [share](<https://devfeed.tech/tags/share.md>), [ssh](<https://devfeed.tech/tags/ssh.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>), [vagrant-homestead](<https://devfeed.tech/tags/vagrant-homestead.md>), [want](<https://devfeed.tech/tags/want.md>)

### AI overview

A tutorial showing how to use Homestead's share command and Ngrok to expose a local development environment for colleagues or clients, and to test and debug local sites on mobile devices such as an iPhone.

### Source excerpt

Homestead is a fantastic local dev environment, but what about when you want to test on mobile or share your local dev environment? Here's how

[Next page](<https://devfeed.tech/topics/scripting-bash.md?cursor=WyIyMDE3LTA1LTA2VDE4OjU1OjAwKzAwOjAwIiwgIjAyZjhhOThlLThkYjEtNDQxYS04NmU5LWQwZDljZDBhZDA3YyJd>)