/{i++}i==1' \
84 | | lynx -dump -nomargins -width='10000' -assume_charset=UTF-8 -pseudo_inlines -stdin) \
85 | | tee "$FILENAME:r.txt"
86 |
87 | fi
88 |
89 | echo "$NAME: Downloading $URL to $FILENAME"
90 |
91 | curl --continue-at - --fail --location --output "$FILENAME" "$URL"
92 |
93 | EXIT="$?"
94 |
95 | ## exit 22 means 'the file was already fully downloaded'
96 | [ "$EXIT" != "0" -a "$EXIT" != "22" ] && echo "$NAME: Download of $URL failed (EXIT = $EXIT)" && exit 0
97 |
98 | [[ ! -e "$FILENAME" ]] && echo "$NAME: $FILENAME does not exist." && exit 0
99 |
100 | [[ ! -s "$FILENAME" ]] && echo "$NAME: $FILENAME is zero bytes." && rm -f "$FILENAME" && exit 0
101 |
102 | pgrep Flux && LAUNCH='yes' && pkill Flux
103 |
104 | echo "$NAME: Installing $FILENAME to $INSTALL_TO:h/"
105 |
106 | ditto --noqtn -xk "$FILENAME" "$INSTALL_TO:h/"
107 |
108 | EXIT="$?"
109 |
110 | if [ "$EXIT" = "0" ]
111 | then
112 |
113 | echo "$NAME: Successfully installed/updated $INSTALL_TO"
114 |
115 | else
116 | echo "$NAME: ditto failed (\$EXIT = $EXIT)"
117 |
118 | exit 1
119 | fi
120 |
121 | [[ "$LAUNCH" = "yes" ]] && echo "$NAME: relaunching Flux" && open --background "$INSTALL_TO"
122 |
123 | exit 0
124 | #
125 | #EOF
126 |
--------------------------------------------------------------------------------
/di-fork.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env zsh -f
2 | # Purpose: https://git-fork.com
3 | #
4 | # From: Timothy J. Luoma
5 | # Mail: luomat at gmail dot com
6 | # Date: 2019-06-07
7 | # Verified: 2025-02-24
8 |
9 | NAME="$0:t:r"
10 |
11 | if [[ -e "$HOME/.path" ]]
12 | then
13 | source "$HOME/.path"
14 | fi
15 |
16 | INSTALL_TO='/Applications/Fork.app'
17 |
18 | XML_FEED='https://git-fork.com/update/feed.xml'
19 |
20 | INFO=($(curl -sSfL "${XML_FEED}" \
21 | | tr -s ' ' '\012' \
22 | | egrep 'sparkle:version|url=' \
23 | | head -2 \
24 | | sort \
25 | | awk -F'"' '/^/{print $2}'))
26 |
27 | # "Sparkle" will always come before "url" because of "sort"
28 | LATEST_VERSION="$INFO[1]"
29 | URL="$INFO[2]"
30 |
31 | # If any of these are blank, we cannot continue
32 | if [ "$INFO" = "" -o "$URL" = "" -o "$LATEST_VERSION" = "" ]
33 | then
34 | echo "$NAME: Error: bad data received:
35 | INFO: $INFO
36 | LATEST_VERSION: $LATEST_VERSION
37 | URL: $URL
38 | "
39 |
40 | exit 1
41 | fi
42 |
43 | if [[ -e "$INSTALL_TO" ]]
44 | then
45 |
46 | INSTALLED_VERSION=$(defaults read "${INSTALL_TO}/Contents/Info" CFBundleShortVersionString)
47 |
48 | autoload is-at-least
49 |
50 | is-at-least "$LATEST_VERSION" "$INSTALLED_VERSION"
51 |
52 | VERSION_COMPARE="$?"
53 |
54 | if [ "$VERSION_COMPARE" = "0" ]
55 | then
56 | echo "$NAME: Up-To-Date ($INSTALLED_VERSION)"
57 | exit 0
58 | fi
59 |
60 | echo "$NAME: Outdated: $INSTALLED_VERSION vs $LATEST_VERSION"
61 |
62 | FIRST_INSTALL='no'
63 |
64 | else
65 |
66 | FIRST_INSTALL='yes'
67 | fi
68 |
69 | FILENAME="$HOME/Downloads/${${INSTALL_TO:t:r}// /}-${LATEST_VERSION}.dmg"
70 |
71 | if (( $+commands[lynx] ))
72 | then
73 |
74 | ( echo "Fork ${LATEST_VERSION}\n\n${URL}\n$XML_FEED\n" \
75 | ; curl -sfLS "$XML_FEED" \
76 | | awk '/