I wonder is there any program that can take a bash script as input and print out all bash commands it will run? A program that would unroll loops, expand environment variables and generally not perform any destructive action nor call any external binaries. It’s like a dry run of sorts.

  • RandomLegend [He/Him]@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    9
    ·
    edit-2
    2 years ago

    Found this over on Stackoverflow

    You could try running the script under Kornshell. When you execute a script with ksh -D, it reads the commands and checks them for syntax, but doesn’t execute them. Combine that with set -xv, and you’ll print out the commands that will be executed.

    You can also use set -n for the same effect. Kornshell and BASH are fairly compatible with each other. If it’s a pure Bourne shell script, both Kornshell and BASH will execute it pretty much the same.

    You can also run ksh -u which will cause unset shell variables to cause the script to fail. However, that wouldn’t have caught the catless cat of a nonexistent file. In that case, the shell variable was set. It was set to null.

    Of course, you could run the script under a restricted shell too, but that’s probably not going to uninstall the package.

    That’s the best you can probably do.

      • RandomLegend [He/Him]@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        3
        ·
        2 years ago

        yeah i think a sandbox would be the best solution.

        Depending on what script OP is trying to run it would be best to just “rebuild” the potentially affected part of your system inside a VM and see what happens.

    • tvcvt@lemmy.ml
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 years ago

      This is great—I’ve somehow never noticed set -n before. Very helpful.