💾 Archived View for rawtext.club › ~samhunter › random › challenge captured on 2024-08-18 at 22:41:34.

View Raw

More Information

⬅️ Previous capture (2021-12-03)

🚧 View Differences

-=-=-=-=-=-=-

#! /bin/bash
CHALLENGE="The Bare Necessities of Life 2021"
declare -i SCRIPT=0
CHALLENGEBIN="$HOME/shell2021"
declare -a ESSENTIALS=( awk bash cat chmod chown cp date ed env file find grep head ln ls mkdir mv ps rm sed sed sort stat stty tail tput tr uptime w who)
declare -a NETWORK=( ssh scp telnet w3m mail )
declare -a DEVEL=( )
declare -a RTC=( shlog )
declare -a LUXURY=( vim sftp )

create_scripts () {
	echo "tput clear" > $CHALLENGEBIN/clear && chmod +x $CHALLENGEBIN/clear
	((++SCRIPT))

	echo "[ -n \"\$1\" ] && > \$1" > $CHALLENGEBIN/touch && chmod +x $CHALLENGEBIN/touch
	((++SCRIPT))

	cat <<-_gab_ > $CHALLENGEBIN/gab && chmod +x $CHALLENGEBIN/gab	
	#! $CHALLENGEBIN/bash
	$(which python3) $(which gab) "\$@"
	_gab_
	((++SCRIPT))

	cat <<-_who_ > $CHALLENGEBIN/who-is && chmod +x $CHALLENGEBIN/who-is
	#! $CHALLENGEBIN/bash
	$(which python3) $(which who-is) "\$@"
	_who_
	((++SCRIPT))

	cat <<-_linkulator_ > $CHALLENGEBIN/linkulator && chmod +x $CHALLENGEBIN/linkulator
	#! $CHALLENGEBIN/bash
	$(which python3) $(which linkulator) "\$@"
	_linkulator_
	((++SCRIPT))

	cat <<-_recent_ > $CHALLENGEBIN/recent && chmod +x $CHALLENGEBIN/recent
	#! $CHALLENGEBIN/bash
	PATH=/usr/bin:$CHALLENGEBIN $(which recent)
	_recent_
	((++SCRIPT))

	cat <<-_iris_ > $CHALLENGEBIN/iris && chmod +x $CHALLENGEBIN/iris
	#! $CHALLENGEBIN/bash
	$(which ruby) $(which iris) "\$@"
	_iris_
	((++SCRIPT))

	cat <<-_man_ > $CHALLENGEBIN/man && chmod +x $CHALLENGEBIN/man
	#! $CHALLENGEBIN/bash
	PATH=/bin:/usr/bin $(which man) "\$@"
	_man_
	((++SCRIPT))

	cat <<-_nl_ > $CHALLENGEBIN/nl && chmod +x $CHALLENGEBIN/nl
	#! $CHALLENGEBIN/bash
	cat -n \$@
	((++SCRIPT))
}
init () {
	[ -d "$CHALLENGEBIN" ] || mkdir -p "$CHALLENGEBIN"

	cd "$CHALLENGEBIN" && {
		UTILS=( "${ESSENTIALS[@]}" "${NETWORK[@]}" "${DEVEL[@]}" "${RTC[@]}" "${LUXURY[@]}" )
		for d in "${UTILS[@]}"; do
				[ -x "$d" ] || ln -s $(which $d) "$CHALLENGEBIN"
		done

		create_scripts

		cat <<-_profile_ > $CHALLENGEBIN/.profile
		unset PROMPT_COMMAND
		. <(typeset -f | awk '/\(\)/{printf("unset -f %s\n", \$1);}')
		readonly PATH="$CHALLENGEBIN"
		readonly PS1="$ "
		readonly EDITOR=ed
		export PATH PS1 EDITOR 
		_profile_

		cat <<-_accept_ > $CHALLENGEBIN/accept
			echo "Challenge started at $(date +"%Y-%m-%d %H:%M") // $LOGNAME@$HOSTNAME"
			gab -c challenges\\! ; gab msg "Joined \"$CHALLENGE\" challenge."
			[ -r $CHALLENGEBIN/.profile ] && $CHALLENGEBIN/bash --noprofile --init-file $CHALLENGEBIN/.profile
		_accept_
		chmod +x $CHALLENGEBIN/accept

		cat <<-_addcmd_ > $CHALLENGEBIN/addcmd && chmod +x $CHALLENGEBIN/addcmd
			#! /bin/bash
			PATH="$HOME/bin:/usr/local/bin:/usr/bin:/bin"
			[[ -n "\$1" && -n "\$(command -v "\$1")" ]] || exit 1
			ln -s "\$(command -v "\$1")" "$CHALLENGEBIN/\$1" || exit 1
			gab -c challenges\\! ; gab msg "Added \"\$1\""
		_addcmd_

		cat <<-_delcmd_ > $CHALLENGEBIN/delcmd && chmod +x $CHALLENGEBIN/delcmd
		#! /bin/bash
		rm -f "/home/samhunter/shell2021/\$1" || exit 1
		gab -c challenges\\! ; gab msg "Removed \"\$1\""
		_delcmd_

		cat <<-_banner_
		C H A L L E N G E
		$CHALLENGE
		
		Run "$CHALLENGEBIN/accept" to start your challenge with:
		- ${#ESSENTIALS[@]} essentials;
		- ${#NETWORK[@]} network tools;
		- ${#DEVEL[@]} development tools;
		- ${#RTC[@]} RTC tools;
		- ${SCRIPT} scripts;
		and ${#LUXURY[@]} luxury item(s).
		_banner_

		cd $HOME
	}
}

accept() {
	:
}

quit() {
	:
}

init