aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/wsl/.local/bin/mkln.sh
blob: ef174c28720e214a759ae4760ce69f1eafb5c4c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env bash

TEMP=$(getopt -o hvqdf --long help,verbose,quiet,debug,force \
    -n 'javawrap' -- "$@")

if [ $? != 0 ]; then
    echo "Terminating..." >&2
    exit 1
fi

eval set -- "$TEMP"

SCRIPT="$(basename $0)"
VERBOSE=false
QUIET=false
DEBUG=false
FORCE=false

read -r -d '' USAGE <<-EOF
USAGE: $SCRIPT [OPTIONS] <SOURCE> <TARGET>

OPTIONS:
    -h, --help                          Show this message
    -v, --verbose                       Show more output
    -q, --quiet                         Suppress all output
    -d, --debug                         NOT IMPLEMENTED
    -f, --force                         Overwrite items

ARGS:
    <SOURCE> <TARGET>...  File to link.
EOF

while true; do
    case "$1" in
    -h | --help)
        echo "$USAGE"
        exit 0
        ;;
    -v | --verbose)
        VERBOSE=true
        shift
        ;;
    -q | --quiet)
        QUIET=true
        shift
        ;;
    -d | --debug)
        DEBUG=true
        shift
        ;;
    -f | --force)
        FORCE=true
        shift
        ;;
    --)
        shift
        break
        ;;
    *)
        break
        ;;
    esac
done

if ! command -v powershell.exe &>/dev/null; then
    [ "$QUIET" != true ] && echo "Powershell not found in path." >&2
    exit 1
fi

if [ -z "$2" ]; then
    2="$(pwd)"
fi

[ "$VERBOSE" == true ] && echo "linking $2 -> $1"

if [ -d "$1" ]; then
    [ "$VERBOSE" == true ] && echo "$1 is a directory. Creating symbolic link."
    args='/D'
fi

mkdir -p $(dirname $2)

source=$(wslpath -w $1)
target=$(wslpath -w $(dirname $2))\\$(basename $2)

if ls -la "$(dirname $2)/" 2>/dev/null | grep -q "$(basename $2)"; then

    current_path=$(powershell.exe -c "(Get-Item $target).Target" 2>/dev/null)

    if [[ "${current_path/*wsl$/}" == *"${source/*wsl$/}"* ]]; then
        [ "$VERBOSE" == true ] && echo "$(basename $2) is set correctly. Skipping."
        exit 0
    fi

    if [ "$FORCE" == true ]; then
        [ "$VERBOSE" == true ] && echo "$(basename $2) exists. Overwriting."
        rm -rf "$2"
    else
        [ "$QUIET" != true ] && echo "$(basename $target) already exists. Use -f to overwrite." >&2
        exit 1
    fi
fi

mkdir -p "$(dirname $2)"
cmd="cd ~; cmd /c mklink ${args} ${target} ${source}"

if [ "$DEBUG" == true ]; then
    [ "$QUIET" != true ] && printf '\nCommand: \n%s\n\n' "powershell.exe -c ${cmd} &>/dev/null"
else
    if $QUIET; then
        powershell.exe -c "${cmd}" &>/dev/null
    else
        powershell.exe -c "${cmd}"
    fi
fi