-
-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathtry.sh
More file actions
executable file
·114 lines (88 loc) · 3.25 KB
/
try.sh
File metadata and controls
executable file
·114 lines (88 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env bash
#
# try.sh - show IOCCC entry 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