Sáng nay, à, cả ngày hôm nay hì hục, rút cục cũng xong cái task “Run file sh from file”.
Bài toán thế này: Cho file A, trong file có nhiều dòng, mỗi dòng gồm nhiều tham số, mỗi tham số cách nhau bởi dấu chấm phẩy (;), đọc từng dòng và tách các tham số để tạo thành một câu lệnh và chạy câu lệnh đó. Tất cả viết bằng bash script.
Trước giờ dùng java, python, php, javascript thấy nó cũng giống giống tiếng người, nhưng động vào bash script thì thấy nó đúng là tiếng máy chứ không phải tiếng người :))
Nhọc công google thần chưởng mãi mà nó vẫn không sao ra được kết quả. Đã có lúc định quay sang code bằng python hoặc nodejs, nhưng mà nghĩ tức quá, chẳng lẽ thua bọn bash củ chuối này, cuối cùng cũng có được thành quả.
Túm lại là như này, không giải thích nhiều nhé, mệt lắm /:)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# /bin/bash | |
while IFS='' read -r i || [[ -n "$i" ]]; do | |
echo "$i" | |
MODULE_ID=$(echo $i | awk -F';' '{print $1}') | |
COMMAND=$(echo $i | awk -F';' '{print $2}') | |
MODULE_NAME=$(echo $i | awk -F';' '{print $3}') | |
MODULE_VERSION=$(echo $i | awk -F';' '{print $4}') | |
MODULE_URL=$(echo $i | awk -F';' '{print $6}') | |
echo "MODULE_ID: $MODULE_ID – COMMAND: $COMMAND" | |
IFS='/' read -ra array <<< "$MODULE_URL" | |
#get length of array | |
last_index=${#array[@]} | |
#kill pid before run | |
PID=$(/bin/cat run/$MODULE_ID.pid) | |
kill $PID | |
#run .sh file in folder source | |
RUN_COMMAND="nohup source/${array[last_index-1]} &> /dev/null & echo \$! > run/$MODULE_ID.pid &" | |
echo $RUN_COMMAND | |
eval $RUN_COMMAND | |
done <<< "$(cat run/updateServerModules.version.txt)" |