#!/bin/bash

params="$@ "
dir="$(pwd)"
if [[ "$params" =~ (^| |/\.| \.|^\.)\.($| |/) ]]; then
  if [[ "$params" =~ [^'\']\.\.\/? ]] || [[ "$params" =~ ^\.\.\/? ]]; then
    slash=false
    [[ "$params" =~ \.\.\  ]] && params="${params//\.\.\ /\.\.\/\ }" && slash=true
    while [[ "$params" =~ \.\.\/ ]]; do
	dir="${dir%/*}"
	params="$(echo "$params" | sed -E 's~\.\./([^\.])~%\1~g; s~%%~%~g')"
    done
    $slash && [ -n "$dir" ] && params="${params//"%"/$dir}" || params="${params//"%"/$dir/}"
  fi
  dir="$(pwd)"
  [[ "$params" =~ [^'\']\.\  ]] && params="${params//. /$dir }"
  [[ "$params" =~ ^\.\  ]] && params="${params//. /$dir }"
  [[ "$params" =~ [^'\']\.\/ ]] && params="${params//.\//$dir\/}"
  [[ "$params" =~ ^\.\/ ]] && params="${params//.\//$dir\/}"
fi
chain="$params"
str="$chain"
n=$(wc -w <<< "$str")
file=""
sep=""
found=false
while [ -n "$chain" ]; do
    k=1
    for word in $str; do
        file="$file$sep$word"
	if [[ -e "$file" ]]; then
	    found=true
	    break
	fi
	sep=" "
	((k++))
    done
    [ $k -ge $n ] && ! $found && chain="${chain#* }" && str="$chain" || for ((i=0; i<$k; i++)); do str="${str#* }"; done
    $found && params="$(echo "$params" | sed -E "s~$file ~\"$file\" ~g")" && chain="$str"
    n=$(wc -w <<< "$str")
    file=""
    sep=""
    found=false
done

echo "${params::-1}"
