#!/bin/sh # This file is a part of Julia. License is MIT: https://julialang.org/license # both $1 and $2 are absolute paths beginning with / # returns relative path to $2/$target from $1/$source proc relpath { test $Argc -ge 1 && test $Argc -le 2 || return 1 setglobal current = $(2:+"$1") setglobal target = $(2:-"$1") test $target != . || setglobal target = '/' setglobal target = ""/$(target##/)"" test $current != . || setglobal current = '/' setglobal current = $(current:="/") setglobal current = ""/$(current##/)"" setglobal appendix = $(target##/) setglobal relative = '''' while appendix="${target#"$current"/}" [ "$current" != '/' ] && [ "$appendix" = "$target" ]; { if test $current = $appendix { setglobal relative = $(relative:-.) echo $(relative#/) return 0 } setglobal current = $(current%/*) setglobal relative = ""$relative$(relative:+/).."" } setglobal relative = ""$relative$(relative:+${appendix:+/})$(appendix#/)"" echo $relative } relpath @Argv