UP(1) FreeBSD General Commands Manual UP(1)

up
upload file

up [-h] [file]

up -c | -t command

up -s

up uploads a file to temp.causal.agency with scp(1). If no file is provided, standard input is read and uploaded as text.

The destination file name is chosen using date(1) and openssl(1) rand. The URL of the uploaded file is printed and copied to the pasteboard with pbcopy(1) if available.

The arguments are as follows:

Run a command to produce a text file for upload.
Use hilex(1) to produce an HTML file for upload.
Use screencapture(1) or scrot(1) to produce a PNG file for upload. The file is optimized by pngo(1).
Run a command with ptee(1) and shotty(1) to produce an HTML file for upload.

Any arguments after ‘--’ are passed to hilex(1) and screencapture(1) or scrot(1), respectively.

June 21, 2021 FreeBSD 12.2-RELEASE-p7

up.sh in git

#!/bin/sh
set -eu

readonly Host='temp.causal.agency'

upload() {
	src=$1
	ext=${src##*.}
	ts=$(date +'%s')
	rand=$(openssl rand -hex 4)
	url=$(printf '%s/%x%s.%s' "$Host" "$ts" "$rand" "$ext")
	scp -q "$src" "${Host}:/usr/local/www/${url}"
	echo "https://${url}"
}

temp() {
	temp=$(mktemp -d)
	trap 'rm -r "$temp"' EXIT
}

uploadText() {
	temp
	cat >"${temp}/input.txt"
	upload "${temp}/input.txt"
}

uploadCommand() {
	temp
	echo "$ $1" >"${temp}/exec.txt"
	$SHELL -c "$1" >>"${temp}/exec.txt" 2>&1 || true
	upload "${temp}/exec.txt"
}

uploadHilex() {
	temp
	hilex -f html -o document,tab=4 "$@" >"${temp}/hilex.html"
	upload "${temp}/hilex.html"
}

uploadScreen() {
	temp
	if type screencapture >/dev/null; then
		screencapture -i "$@" "${temp}/capture.png"
	else
		scrot -s "$@" "${temp}/capture.png"
	fi
	pngo "${temp}/capture.png"
	upload "${temp}/capture.png"
}

uploadTerminal() {
	temp
	cat >"${temp}/term.html" <<-EOF
	<!DOCTYPE html>
	<title>${1}</title>
	<style>
	$(scheme -s)
	</style>
	EOF
	ptee $SHELL -c "$1" | shotty -Bs >>"${temp}/term.html"
	upload "${temp}/term.html"
}

while getopts 'chst' opt; do
	case $opt in
		(c) fn=uploadCommand;;
		(h) fn=uploadHilex;;
		(s) fn=uploadScreen;;
		(t) fn=uploadTerminal;;
		(?) exit 1;;
	esac
done
shift $((OPTIND - 1))
[ $# -eq 0 ] && : ${fn:=uploadText}
: ${fn:=upload}

url=$($fn "$@")
printf '%s' "$url" | pbcopy || true
echo "$url"