Commit dcdbf40b authored by nanahira's avatar nanahira

allow -c config

parent dc2030f9
#!/bin/bash #!/bin/bash
pid=0 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" echo "$down"
run_stop() { run_stop() {
signalCode=$1 signalCode=$1
if [ -n "$down" ]; then for down in "${downs[@]}"; do
eval "$down" eval "$down"
fi done
if [ $pid -ne 0 ]; then if [ $pid -ne 0 ]; then
kill "-$signalCode" "$pid" kill "-$signalCode" "$pid"
wait "$pid" wait "$pid"
......
...@@ -15,7 +15,25 @@ use std::{env, mem::MaybeUninit}; ...@@ -15,7 +15,25 @@ use std::{env, mem::MaybeUninit};
fn main() -> Result<()> { fn main() -> Result<()> {
println!("Starting"); 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 let routers = &config
.routers .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