Fix systemd ExecStart parsing whitespace
This commit is contained in:
38
src/daemon/systemd-unit.test.ts
Normal file
38
src/daemon/systemd-unit.test.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
|
import { parseSystemdExecStart } from "./systemd-unit.js";
|
||||||
|
|
||||||
|
describe("parseSystemdExecStart", () => {
|
||||||
|
it("splits on whitespace outside quotes", () => {
|
||||||
|
const execStart = "/usr/bin/clawdbot gateway start --foo bar";
|
||||||
|
expect(parseSystemdExecStart(execStart)).toEqual([
|
||||||
|
"/usr/bin/clawdbot",
|
||||||
|
"gateway",
|
||||||
|
"start",
|
||||||
|
"--foo",
|
||||||
|
"bar",
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("preserves quoted arguments", () => {
|
||||||
|
const execStart = "/usr/bin/clawdbot gateway start --name \"My Bot\"";
|
||||||
|
expect(parseSystemdExecStart(execStart)).toEqual([
|
||||||
|
"/usr/bin/clawdbot",
|
||||||
|
"gateway",
|
||||||
|
"start",
|
||||||
|
"--name",
|
||||||
|
"My Bot",
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("supports backslash-escaped characters", () => {
|
||||||
|
const execStart = "/usr/bin/clawdbot gateway start --path \/tmp\/clawdbot";
|
||||||
|
expect(parseSystemdExecStart(execStart)).toEqual([
|
||||||
|
"/usr/bin/clawdbot",
|
||||||
|
"gateway",
|
||||||
|
"start",
|
||||||
|
"--path",
|
||||||
|
"/tmp/clawdbot",
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -76,7 +76,7 @@ export function parseSystemdExecStart(value: string): string[] {
|
|||||||
inQuotes = !inQuotes;
|
inQuotes = !inQuotes;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!inQuotes && /\\s/.test(char)) {
|
if (!inQuotes && /\s/.test(char)) {
|
||||||
if (current) {
|
if (current) {
|
||||||
args.push(current);
|
args.push(current);
|
||||||
current = "";
|
current = "";
|
||||||
|
|||||||
Reference in New Issue
Block a user