How to redirect and append both standard output and standard error to a file with Bash

cmd >>file.txt 2>&1 Bash executes the redirects from left to right as follows: >>file.txt: Open file.txt in append mode and redirect stdout there. 2>&1: Redirect stderr to “where stdout is currently going”. In this case, that is a file opened in append mode. In other words, the &1 reuses the file descriptor which stdout currently … Read more

How do I set a variable to the output of a command in Bash?

In addition to backticks `command`, command substitution can be done with $(command) or “$(command)”, which I find easier to read, and allows for nesting. OUTPUT=$(ls -1) echo “${OUTPUT}” MULTILINE=$(ls \ -1) echo “${MULTILINE}” Quoting (“) does matter to preserve multi-line variable values; it is optional on the right-hand side of an assignment, as word splitting … Read more

How do I parse command line arguments in Bash?

Bash Space-Separated (e.g., –option argument) cat >/tmp/demo-space-separated.sh <<‘EOF’ #!/bin/bash POSITIONAL_ARGS=() while [[ $# -gt 0 ]]; do case $1 in -e|–extension) EXTENSION=”$2″ shift # past argument shift # past value ;; -s|–searchpath) SEARCHPATH=”$2″ shift # past argument shift # past value ;; –default) DEFAULT=YES shift # past argument ;; -*|–*) echo “Unknown option $1” exit … Read more

Extract filename and extension in Bash

First, get file name without the path: filename=$(basename — “$fullfile”) extension=”${filename##*.}” filename=”${filename%.*}” Alternatively, you can focus on the last “https://stackoverflow.com/” of the path instead of the ‘.’ which should work even if you have unpredictable file extensions: filename=”${fullfile##*/}” You may want to check the documentation : On the web at section “3.5.3 Shell Parameter Expansion” … Read more

How can I check if a program exists from a Bash script?

Answer POSIX compatible: command -v <the_command> Example use: if ! command -v <the_command> &> /dev/null then echo “<the_command> could not be found” exit fi For Bash specific environments: hash <the_command> # For regular commands. Or… type <the_command> # To check built-ins and keywords Explanation Avoid which. Not only is it an external process you’re launching … Read more