Rather than showing something like:
Showing diff between 'cmd' and 'cmd':
Press any key to run: diff ...
it now shows instead (for example):
$ diff hatcat.txt cathat.txt (diff between 'hatcat' and './cathat'):
Press any key to continue:
The reason it's two lines is because having it on one line makes it a
kind long line. Probably not an issue with modern systems but I have
tried to keep the lines close to 80 columns and not doing it this way
would make it almost 90.
The script now has -C 1 used to show context. This way the file names
are shown in the output to help distinguish the files being compared. Of
course it might be possible to diff the command outputs themselves but
this works better because it will show the files that are the same
(when they are) rather than '.. and - are identical'.
115 lines
3.2 KiB
Bash
Executable File
115 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# try.sh - show IOCCC winner 1996/gandalf
|
|
#
|
|
# BTW: it is absolutely perilous to 'try' the patience of Gandalf: go ahead,
|
|
# 'try it'! :-)
|
|
#
|
|
|
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
|
# this way allows us to have the user specify a different compiler in an easy
|
|
# way.
|
|
if [[ -z "$CC" ]]; then
|
|
CC="cc"
|
|
fi
|
|
|
|
make CC="$CC" all >/dev/null || exit 1
|
|
|
|
# clear screen after compilation so that only the entry is shown
|
|
clear
|
|
|
|
if [[ "$#" -gt 0 ]]; then
|
|
if [[ "${1@L}" = "gandalf" ]]; then
|
|
echo "It is perilous to try the patience of Gandalf!" 1>&2
|
|
read -r -p "Are you sure you wish to do this (Y/N)? "
|
|
echo 1>&2
|
|
if [[ "$REPLY" != "y" && "$REPLY" != "Y" ]]; then
|
|
echo "Wise move, will not try Gandalf's patience!" 1>&2
|
|
exit 0
|
|
else
|
|
echo "Fool of a ${USER@u}!" 1>&2
|
|
echo "Oh well, never mind that, moving on ..." 1>&2
|
|
echo 1>&2
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# remove temporary files to show later
|
|
rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt
|
|
|
|
trap 'rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt; exit' 0 1 2 3 15
|
|
|
|
show_diff()
|
|
{
|
|
if [[ "$#" -ne 3 ]]; then
|
|
echo "$0: show_diff expects two args, got: $#" 1>&2
|
|
exit 1
|
|
fi
|
|
echo "$ diff $1 $2 ($3): " 1>&2
|
|
read -r -n 1 -p "Press any key to continue: "
|
|
echo 1>&2
|
|
diff -C 1 "$1" "$2" && echo "$1 and $2 are identical"
|
|
echo 1>&2
|
|
}
|
|
|
|
read -r -n 1 -p "Press any key to run: diff -s hatcat cathat: "
|
|
echo 1>&2
|
|
diff -s hatcat cathat
|
|
echo 1>&2
|
|
|
|
echo "Next notice how running both cathat and hatcat in different ways" 1>&2
|
|
echo "shows different output." 1>&2
|
|
|
|
read -r -n 1 -p "Press any key to run: PATH=.:\$PATH: "
|
|
echo 1>&2
|
|
PATH=.:$PATH
|
|
read -r -n 1 -p "Press any key to run: hatcat | tee hatcat.txt (no path): "
|
|
echo 1>&2
|
|
hatcat | tee hatcat.txt
|
|
echo 1>&2
|
|
|
|
read -r -n 1 -p "Press any key to run: cathat | tee cathat.txt (no path): "
|
|
echo 1>&2
|
|
cathat | tee cathat.txt
|
|
echo 1>&2
|
|
|
|
show_diff hatcat.txt cathat.txt "diff between 'hatcat' and './cathat'"
|
|
|
|
read -r -n 1 -p "Press any key to run: ./hatcat | tee hatcat2.txt: "
|
|
echo 1>&2
|
|
./hatcat | tee hatcat2.txt
|
|
|
|
read -r -n 1 -p "Press any key to run: ./cathat | tee cathat2.txt: "
|
|
echo 1>&2
|
|
./cathat | tee cathat2.txt
|
|
|
|
show_diff hatcat.txt hatcat2.txt "diff between 'hatcat' and './hatcat'"
|
|
|
|
read -r -n 1 -p "Press any key to run: \$(pwd)/cathat | tee cathat3.txt: "
|
|
echo 1>&2
|
|
"$(pwd)"/cathat | tee cathat3.txt
|
|
|
|
read -r -n 1 -p "Press any key to run: \$(pwd)/hatcat | tee hatcat3.txt: "
|
|
echo 1>&2
|
|
"$(pwd)"/hatcat | tee hatcat3.txt
|
|
|
|
show_diff hatcat2.txt cathat2.txt "diff between './hatcat' and './cathat'"
|
|
|
|
show_diff hatcat3.txt cathat3.txt "diff between '\$(pwd)/hatcat' and '\$(pwd)/cathat'"
|
|
|
|
show_diff hatcat3.txt hatcat.txt "diff between '\$(pwd)/hatcat' and 'hatcat'"
|
|
|
|
show_diff hatcat3.txt hatcat2.txt "diff between '\$(pwd)/hatcat' and './hatcat'"
|
|
|
|
show_diff cathat3.txt cathat.txt "diff between \$(pwd)/cathat' and 'cathat'"
|
|
|
|
show_diff cathat3.txt cathat2.txt "diff between '\$(pwd)/cathat' and './cathat'"
|
|
|
|
# remove temporary files
|
|
rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt
|
|
|
|
echo 1>&2
|
|
echo "Now answer: why did some of the same programs execute differently?" 1>&2
|
|
|
|
rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt
|