commit d015e13193c3f9fbaf95927d9ad99d206a4ce2e2 from: mtmn date: Thu Aug 27 21:52:23 2026 UTC allow bare commands commit - c78f50be073c1324df8ced7730ea3538e92580f4 commit + d015e13193c3f9fbaf95927d9ad99d206a4ce2e2 blob - 27240973130df2f0ca7d57de805a4629cab6811f blob + 1e7587d8448b2bbc68475e989dca12bf24eb03f3 --- README.md +++ README.md @@ -28,11 +28,12 @@ pisol Run a command in that directory sandbox: ```sh -pisol -- your-command --with arguments +pisol your-command --with arguments ``` -The command receives the caller environment, `PROMPT_ENV_INDICATOR=isolated`, -and `ISOLATE_ENV` set to the canonical working directory. Calling `pisol -- ...` +Use `pisol -- COMMAND` when a command name conflicts with a pisol option. The +command receives the caller environment, `PROMPT_ENV_INDICATOR=isolated`, and +`ISOLATE_ENV` set to the canonical working directory. Calling `pisol COMMAND` inside an existing pisol sandbox prints a warning and directly executes the command rather than creating a nested Landlock domain. blob - 0966c7b012fa721f124c9d3989f4a31de57a5038 blob + 6700b955a568d39338aef1b7ee0798fd5f529cd4 --- bin/pisol +++ bin/pisol @@ -4,10 +4,12 @@ set -euo pipefail pisol_usage() { cat <<'EOF' Usage: pisol + pisol COMMAND [ARG...] pisol -- COMMAND [ARG...] With no arguments, edit the local .isolate configuration. -With --, execute COMMAND in the current directory Landrun sandbox. +With a command, execute it in the current directory Landrun sandbox. +Use -- before commands whose names begin with a hyphen. EOF } @@ -41,9 +43,8 @@ case ${1:-} in fi ;; *) - printf 'pisol: unknown option: %s\n' "$1" >&2 - pisol_usage >&2 - exit 2 + # Treat remaining arguments as the command. -- remains available for + # command names that conflict with pisol options. ;; esac blob - 719bc22fcae4c29d6dcd4d5cc3af89279fa2ae73 blob + 89789314f9085e56e28497232eb4c24a28d07602 --- doc/pisol.1 +++ doc/pisol.1 @@ -4,17 +4,21 @@ pisol \- configure and run working-directory Landrun i .SH SYNOPSIS .B pisol .br +.B pisol +.I COMMAND +.RI [ ARG ...] +.br .B pisol -- .I COMMAND .RI [ ARG ...] .SH DESCRIPTION .B pisol opens a Chez Scheme terminal editor for the current directory isolation -configuration. With -.BR -- , -it replaces itself with +configuration. With a command, it replaces itself with .BR landrun (1) -and executes the command in a working-directory sandbox. +and executes the command in a working-directory sandbox. Use +.B -- +before a command whose name conflicts with a pisol option. .PP The canonical current directory defines the writable tree. The configuration path is blob - 6b778faeb157579442fdc80a46aa8618606bdea4 blob + 09a680f38add099be98173fb824792979f375e2a --- test/integration.sh +++ test/integration.sh @@ -33,8 +33,8 @@ run_pisol() { ) } -if run_pisol -- sh -c 'exit 7'; then - echo "pisol integration: command status was not propagated" >&2 +if run_pisol sh -c 'exit 7'; then + echo "pisol integration: direct command status was not propagated" >&2 exit 1 else status=$? @@ -67,6 +67,7 @@ else fi [ "$before" = "$(cksum "$capture")" ] +run_pisol --help | grep -F 'pisol COMMAND' >/dev/null run_pisol --help | grep -F 'pisol -- COMMAND' >/dev/null rm -f "$project/.isolate"