Workaround lack of builtin in /bin/sh

This commit is contained in:
Anmol Sethi 2020-05-27 17:01:33 -04:00
parent 29e5c4a293
commit af398c49fd
No known key found for this signature in database
GPG Key ID: 8CEF1878FF10ADEB

View File

@ -13,7 +13,7 @@ usage() {
" "
fi fi
cat << EOF cath << EOF
Installs code-server for Linux and macOS. Installs code-server for Linux and macOS.
It tries to use the system package manager if possible. It tries to use the system package manager if possible.
After successful installation it explains how to start using code-server. After successful installation it explains how to start using code-server.
@ -67,8 +67,8 @@ echo_latest_version() {
} }
echo_standalone_postinstall() { echo_standalone_postinstall() {
echo echoh
cat << EOF cath << EOF
Standalone release has been installed into $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION Standalone release has been installed into $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION
Please extend your path to use code-server: Please extend your path to use code-server:
PATH="$STANDALONE_INSTALL_PREFIX/bin:\$PATH" PATH="$STANDALONE_INSTALL_PREFIX/bin:\$PATH"
@ -78,8 +78,8 @@ EOF
} }
echo_systemd_postinstall() { echo_systemd_postinstall() {
echo echoh
cat << EOF cath << EOF
To have systemd start code-server now and restart on boot: To have systemd start code-server now and restart on boot:
systemctl --user enable --now code-server systemctl --user enable --now code-server
Or, if you don't want/need a background service you can run: Or, if you don't want/need a background service you can run:
@ -163,7 +163,7 @@ main() {
echoerr 'Please rerun without the "--method standalone" flag to install from npm.' echoerr 'Please rerun without the "--method standalone" flag to install from npm.'
exit 1 exit 1
fi fi
echo "No precompiled releases for $(uname -m)." echoh "No precompiled releases for $(uname -m)."
install_npm install_npm
return return
fi fi
@ -190,7 +190,7 @@ main() {
install_aur install_aur
;; ;;
*) *)
echo "Unsupported package manager." echoh "Unsupported package manager."
install_standalone install_standalone
;; ;;
esac esac
@ -233,7 +233,7 @@ fetch() {
FILE="$2" FILE="$2"
if [ -e "$FILE" ]; then if [ -e "$FILE" ]; then
echo "+ Reusing $CACHE_DIR/${URL##*/}" echoh "+ Reusing $CACHE_DIR/${URL##*/}"
return return
fi fi
@ -247,22 +247,22 @@ fetch() {
install_macos() { install_macos() {
if command_exists brew; then if command_exists brew; then
echo "Installing from Homebrew." echoh "Installing from Homebrew."
echo echoh
sh_c brew install code-server sh_c brew install code-server
return return
fi fi
echo "Homebrew not installed." echoh "Homebrew not installed."
install_standalone install_standalone
} }
install_deb() { install_deb() {
echo "Installing v$VERSION deb package from GitHub releases." echoh "Installing v$VERSION deb package from GitHub releases."
echo echoh
fetch "https://github.com/cdr/code-server/releases/download/v$VERSION/code-server_${VERSION}_$ARCH.deb" \ fetch "https://github.com/cdr/code-server/releases/download/v$VERSION/code-server_${VERSION}_$ARCH.deb" \
"$CACHE_DIR/code-server_${VERSION}_$ARCH.deb" "$CACHE_DIR/code-server_${VERSION}_$ARCH.deb"
@ -272,8 +272,8 @@ install_deb() {
} }
install_rpm() { install_rpm() {
echo "Installing v$VERSION rpm package from GitHub releases." echoh "Installing v$VERSION rpm package from GitHub releases."
echo echoh
fetch "https://github.com/cdr/code-server/releases/download/v$VERSION/code-server-$VERSION-$ARCH.rpm" \ fetch "https://github.com/cdr/code-server/releases/download/v$VERSION/code-server-$VERSION-$ARCH.rpm" \
"$CACHE_DIR/code-server-$VERSION-$ARCH.rpm" "$CACHE_DIR/code-server-$VERSION-$ARCH.rpm"
@ -283,27 +283,28 @@ install_rpm() {
} }
install_aur() { install_aur() {
echo "Installing from the AUR." echoh "Installing from the AUR."
echo echoh
tmp_dir="$(mktemp -d)" tmp_dir="$(mktemp -d)"
echo "+ Downloading PKGBUILD into $tmp_dir from https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz" echoh "+ Downloading PKGBUILD into $tmp_dir from https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz"
curl -fsSL https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz | tar -xzC "$tmp_dir" curl -fsSL https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz | tar -xzC "$tmp_dir"
VERSION="$(. "$tmp_dir/code-server/PKGBUILD" && echo "$pkgver")" VERSION="$(. "$tmp_dir/code-server/PKGBUILD" && echo "$pkgver")"
rm -R "$tmp_dir"
sh_c mkdir -p "$CACHE_DIR/code-server-$VERSION-aur" sh_c mkdir -p "$CACHE_DIR/code-server-$VERSION-aur"
sh_c cp -a "$tmp_dir/code-server/*" "$CACHE_DIR/code-server-$VERSION-aur" sh_c cp -a "$tmp_dir/code-server/*" "$CACHE_DIR/code-server-$VERSION-aur"
sh_c cd "$CACHE_DIR/code-server-$VERSION-aur" sh_c cd "$CACHE_DIR/code-server-$VERSION-aur"
sh_c makepkg -si sh_c makepkg -si
rm -R "$tmp_dir"
echo_systemd_postinstall echo_systemd_postinstall
} }
install_standalone() { install_standalone() {
echo "Installing standalone release archive v$VERSION" echoh "Installing standalone release archive v$VERSION"
echo echoh
fetch "https://github.com/cdr/code-server/releases/download/v$VERSION/code-server-$VERSION-$OS-$ARCH.tar.gz" \ fetch "https://github.com/cdr/code-server/releases/download/v$VERSION/code-server-$VERSION-$OS-$ARCH.tar.gz" \
"$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz" "$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz"
@ -314,9 +315,9 @@ install_standalone() {
fi fi
if [ -e "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION" ]; then if [ -e "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION" ]; then
echo echoh
echo "code-server-$VERSION is already installed at $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION" echoh "code-server-$VERSION is already installed at $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION"
echo "Remove it to reinstall." echoh "Remove it to reinstall."
exit 0 exit 0
fi fi
@ -334,8 +335,8 @@ install_npm() {
if [ ! -w "$(yarn global bin)" ]; then if [ ! -w "$(yarn global bin)" ]; then
sh_c="sudo_sh_c" sh_c="sudo_sh_c"
fi fi
echo "Installing with yarn." echoh "Installing with yarn."
echo echoh
"$sh_c" yarn global add code-server --unsafe-perm "$sh_c" yarn global add code-server --unsafe-perm
return return
elif command_exists npm; then elif command_exists npm; then
@ -343,12 +344,12 @@ install_npm() {
if [ ! -w "$(npm config get prefix)" ]; then if [ ! -w "$(npm config get prefix)" ]; then
sh_c="sudo_sh_c" sh_c="sudo_sh_c"
fi fi
echo "Installing with npm." echoh "Installing with npm."
echo echoh
"$sh_c" npm install -g code-server --unsafe-perm "$sh_c" npm install -g code-server --unsafe-perm
return return
fi fi
echo echoh
echoerr "Please install npm or yarn to install code-server!" echoerr "Please install npm or yarn to install code-server!"
echoerr "You will need at least node v12 and a few C dependencies." echoerr "You will need at least node v12 and a few C dependencies."
echoerr "See the docs https://github.com/cdr/code-server#yarn-npm" echoerr "See the docs https://github.com/cdr/code-server#yarn-npm"
@ -433,7 +434,7 @@ command_exists() {
} }
sh_c() { sh_c() {
echo "+ $*" echoh "+ $*"
if [ ! "${DRY_RUN-}" ]; then if [ ! "${DRY_RUN-}" ]; then
sh -c "$*" sh -c "$*"
fi fi
@ -447,7 +448,7 @@ sudo_sh_c() {
elif command_exists su; then elif command_exists su; then
sh_c "su -c '$*'" sh_c "su -c '$*'"
else else
echo echoh
echoerr "This script needs to run the following command as root." echoerr "This script needs to run the following command as root."
echoerr " $*" echoerr " $*"
echoerr "Please install sudo or su." echoerr "Please install sudo or su."
@ -465,16 +466,16 @@ echo_cache_dir() {
fi fi
} }
echo() { echoh() {
builtin echo "$@" | humanpath echo "$@" | humanpath
} }
cat() { cath() {
humanpath humanpath
} }
echoerr() { echoerr() {
echo "$@" >&2 echoh "$@" >&2
} }
# humanpath replaces all occurances of $HOME with ~ # humanpath replaces all occurances of $HOME with ~