Caching is a core concept in import. Scripts are downloaded exactly once, and
then cached on your filesystem forever (unless the IMPORT_RELOAD=1 environment
variable is set).
#!/usr/bin/env import
# Import script files to the `/tmp` directory
IMPORT_CACHE="/tmp"
# Log information related to `import` to stderr
IMPORT_DEBUG=1
# Force a fresh download of script files (like Shift + Reload in the browser)
IMPORT_RELOAD=1
import assertRun this codeIf you run this example, then you can see the file structure and order of operations because of the debug logging:
import: importing 'assert'
import: normalized URL 'https://import.sh/assert'
import: HTTP GET https://import.sh/assert
import: resolved location 'https://import.sh/assert' -> 'https://raw.githubusercontent.com/importpw/assert/master/assert.sh'
import: calculated hash 'https://import.sh/assert' -> '0a1c5188c768b3b150f1a8a104bb71a3fa160aad'
import: creating symlink β/tmp/links/https/import.sh/assertβ -> β../../../data/0a1c5188c768b3b150f1a8a104bb71a3fa160aadβ
import: successfully downloaded 'https://import.sh/assert' -> '/tmp/data/0a1c5188c768b3b150f1a8a104bb71a3fa160aad'
import: sourcing '/tmp/links/https/import.sh/assert'Now let's take a look at what the actual directory structure looks like:
$ tree /tmp
/tmp
βββ data
β βββ bf671d3752778f91ad0884ff81b3e963af9e4a4f
βββ links
β βββ https
β βββ import.sh
β βββ assert -> ../../../data/bf671d3752778f91ad0884ff81b3e963af9e4a4f
βββ locations
βββ https
βββ import.sh
βββ assertimport generates three subdirectories under the IMPORT_CACHE directory:
data - The raw shell scripts, named after the sha1sum of the file contentslinks - Symbolic links that are named according to the import URLlocations - Files named according to the import URL that point to the real URLIf the IMPORT_CACHE environment variable is not set, the cache location
defaults to the directory import.sh in the OS-specific user cache directory.
For this user cache directory import considers (in order):
$XDG_CACHE_HOME (usually set on Linux)$LOCALAPPDATA (usually set on Windows)$HOME/Library/Caches on macOS and $HOME/.cache everywhere else