Commit dcdbf40b authored by nanahira's avatar nanahira

allow -c config

parent dc2030f9
#!/bin/bash
pid=0
down=$(echo "$1" | jq -r '.routers | .[].down')
downs=()
if [ "${1:-}" = "-c" ] || [ "${1:-}" = "--config" ]; then
config_file="$2"
# 从文件直接 cat 管道给 jq
while IFS= read -r d; do
downs+=("$d")
done < <(cat "$config_file" | jq -r '.routers[].down')
else
# 直接把参数当作 JSON 字符串传给 jq,不存到变量
while IFS= read -r d; do
downs+=("$d")
done < <(printf '%s' "$1" | jq -r '.routers[].down')
fi
echo "$down"
run_stop() {
signalCode=$1
if [ -n "$down" ]; then
for down in "${downs[@]}"; do
eval "$down"
fi
done
if [ $pid -ne 0 ]; then
kill "-$signalCode" "$pid"
wait "$pid"
......
......@@ -15,7 +15,25 @@ use std::{env, mem::MaybeUninit};
fn main() -> Result<()> {
println!("Starting");
let config = serde_json::from_str::<Config>(env::args().nth(1).context("need param")?.as_str())?;
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
return Err("need JSON string or -c <config.json>".into());
}
let config: Config;
if args[1] == "-c" || args[1] == "--config" {
// 从文件读
if args.len() < 3 {
return Err("missing value for -c/--config".into());
}
let data = fs::read_to_string(&args[2])?;
config = serde_json::from_str(&data)?;
} else {
// 当作 JSON 字符串解析
config = serde_json::from_str(&args[1])?;
}
println!("Read config");
let routers = &config
.routers
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment