#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: e [FILE] e -h EOF } help() { cat <<-'EOF' Options: -h, --help Flexibly run a text editor, either directly on in a pipe. Examples: Edit "file.txt": $ e file.txt Manipulate the content of a pipe midway: $ seq 10 | e | grep 5 The editor used is either $VISUAL or $EDITOR, with a fallback to vi in case any of those variables aren't defined. EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done while getopts 'h' flag; do case "$flag" in h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) CMD="${VISUAL:-${EDITOR:-vi}}" if [ ! -t 0 ]; then F="$(mkstemp)" cat > "$F" exec 0&1 exec 1>/dev/tty $CMD "$F" cat "$F" >&3 else $CMD "$@" fi