🔽 Installation

import is a single, self-contained shell script. Installation is as simple as downloading the script into your $PATH and giving it executable permissions. Alternatively, it can be downloaded automatically within a script that uses import.

👢 Bootstrapping the import function

The installation can be anywhere on the $PATH. For example, to install import to /usr/local/bin, run the following:

curl -sfLS https://import.sh > /usr/local/bin/import
chmod +x /usr/local/bin/import

Once you have the import script installed, there are two preferred ways to utilize it in your shell scripts: shebang or source.

Shebang

The most straightforward way to specify import as the entry point of the script using the "shebang" feature of executable files:

#!/usr/bin/env import

type import
Run this code

Note that this method will use the interpreter located at /bin/sh, which usually implies baseline POSIX features. If you need more control over which interpreter is used then see the next method.

Source

Another way to bootstrap import is to simply source it into your script. This method gives you control over which interpreter is used. For example, if you need bash-specific features, you can specify to use it in the shebang, and then source the import script:

#!/bin/bash

. "$(command -v import)"

type import
Run this code

🦿 Automatic download

An alternative approach is to automatically download import in your shell script itself without requiring manual installation.

Eval

It is possible to curl + eval the import function directly into your shell script.

#!/bin/sh

eval "$(curl -sfLS https://import.sh)"

type import
Run this code

Note that this method is not as ideal as the shebang/sourcing methods, because this version incurs an HTTP request to retrieve the import function every time the script is run, and it won't work offline.

Download & Cache

Finally, it is possible to download and cache the import script itself by using the following snippet. This combines the convenience of the eval approach without the cost of an HTTP request on each run, but requires a slightly unwieldy bit of code in each shell script that uses import.

#!/bin/sh

[ "$(uname -s)" = "Darwin" ] && __i="$HOME/Library/Caches" || __i="$HOME/.cache" && __i="${IMPORT_CACHE:-${XDG_CACHE_HOME:-${LOCALAPPDATA:-${__i}}}/import.sh}/import" && [ -r "$__i" ] || curl -sfLSo "$__i" --create-dirs https://import.sh && . "$__i" && unset __i

type import
Run this code

Explanation: the complexity lies almost completely in finding out the default cache location on different operating systems in sync with the import script as detailed in the caching documentation. Following that, the snippet checks if the import script exists in the cache, downloads and stores it via curl if is missing, and finally sources it.