-
-
Notifications
You must be signed in to change notification settings - Fork 8
/
entrypoint.sh
executable file
·135 lines (114 loc) · 3.78 KB
/
entrypoint.sh
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/bash -i
#
# Support arguments (this recommend but not required):
# -f <file> Execute file on host, print the result and exit
# -c <command> [Not recommended to use] Execute command on host, print the result and exit
# -C <command in base64> Execute command on host, print the result and exit
# -v <level> Verbose mode: 1 - verbose, 2 - super verbose
# -e <NAME=B64> -e ... Environement variables (B64 is base64 encoded string)
# -b <BASE64> -b ... Base64 encoded bash command
# -H <HOME path> HOME path. Will be $HOME on the host.
# -X <XDG path> XDG_* path (https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)
#
while getopts f:c:C:v:e:b:H:X: option
do
case "${option}"
in
f) EXECUTE_FILE=${OPTARG};;
c) EXECUTE_COMMAND=${OPTARG};;
C) EXECUTE_COMMAND_B64=${OPTARG};;
v) VERBOSE=${OPTARG};;
e) ENV+=("$OPTARG");;
b) EBASH+=("$OPTARG");;
H) HOMEPATH=${OPTARG};;
X) XDGPATH=${OPTARG};;
esac
done
if [[ $VERBOSE != '' ]]; then
export XXH_VERBOSE=$VERBOSE
fi
for env in "${ENV[@]}"; do
name="$( cut -d '=' -f 1 <<< "$env" )";
val="$( cut -d '=' -f 2- <<< "$env" )";
val=`echo $val | base64 -d`
if [[ $XXH_VERBOSE == '1' || $XXH_VERBOSE == '2' ]]; then
echo Environment variable "$env": name=$name, value=$val
fi
export $name="$val"
done
for eb in "${EBASH[@]}"; do
bash_command=`echo $eb | base64 -d`
if [[ $XXH_VERBOSE == '1' || $XXH_VERBOSE == '2' ]]; then
echo Entrypoint bash execute: $bash_command
fi
eval $bash_command
done
if [[ $EXECUTE_COMMAND ]]; then
if [[ $XXH_VERBOSE == '1' || $XXH_VERBOSE == '2' ]]; then
echo Execute command: $EXECUTE_COMMAND
fi
EXECUTE_COMMAND=(-c "${EXECUTE_COMMAND}")
fi
if [[ $EXECUTE_COMMAND_B64 ]]; then
EXECUTE_COMMAND=`echo $EXECUTE_COMMAND_B64 | base64 -d`
if [[ $XXH_VERBOSE == '1' || $XXH_VERBOSE == '2' ]]; then
echo Execute command base64: $EXECUTE_COMMAND_B64
echo Execute command: $EXECUTE_COMMAND
fi
EXECUTE_COMMAND=(-c "${EXECUTE_COMMAND}")
fi
EXECUTE_FILE=`[ $EXECUTE_FILE ] && echo -n "-- $EXECUTE_FILE" || echo -n ""`
CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)"
export XXH_HOME=$CURRENT_DIR/../../../..
export XONSH_HISTORY_FILE=$XXH_HOME/.xonsh_history
if [[ $HOMEPATH != '' ]]; then
homerealpath=$HOMEPATH
if [[ -d $homerealpath ]]; then
export HOME=$homerealpath
else
echo "Home path not found: $homerealpath"
echo "Set HOME to $XXH_HOME"
export HOME=$XXH_HOME
fi
else
export HOME=$XXH_HOME
fi
if [[ $XDGPATH != '' ]]; then
xdgrealpath=$XDGPATH
if [[ ! -d $xdgrealpath ]]; then
echo "XDG path not found: $xdgrealpath"
echo "Set XDG path to $XXH_HOME"
export XDGPATH=$XXH_HOME
fi
else
export XDGPATH=$XXH_HOME
fi
export XXH_SHELL=xonsh
export XAUTHORITY=/home/$USER/.Xauthority
export XDG_CONFIG_HOME=$XDGPATH/.config
export XDG_DATA_HOME=$XDGPATH/.local/share
export XDG_CACHE_HOME=$XDGPATH/.cache
export TMPDIR=$XDG_CACHE_HOME/tmp
export TEMP=$TMPDIR
mkdir -p $TMPDIR
# Check FUSE support
cd $CURRENT_DIR
if [[ ! -f .entrypoint-check-done ]]; then
if [[ $XXH_VERBOSE == '1' || $XXH_VERBOSE == '2' ]]; then
echo "Extract AppImage" 1>&2
fi
./xonsh --appimage-extract > /dev/null
mv squashfs-root xonsh-squashfs && mv xonsh xonsh-disabled
ln -s ./xonsh-squashfs/usr/bin/xonsh xonsh
echo $check_result > .entrypoint-check-done
fi
for pluginrc_file in $(find $CURRENT_DIR/../../../plugins/xxh-plugin-*/build -type f -name '*prerun.sh' -printf '%f\t%p\n' 2>/dev/null | sort -k1 | cut -f2); do
if [[ -f $pluginrc_file ]]; then
if [[ $XXH_VERBOSE == '1' || $XXH_VERBOSE == '2' ]]; then
echo Load plugin $pluginrc_file
fi
source $pluginrc_file
fi
done
cd $HOME
$CURRENT_DIR/xonsh -i --rc $CURRENT_DIR/xonshrc.xsh $EXECUTE_FILE "${EXECUTE_COMMAND[@]}"