import requests import subprocess import sys import argparse def launch(command, data): if isinstance(command, str): command = [command] elif isinstance(command, tuple): command = list(command) elif not isinstance(command, list): raise ValueError("`command` must be `list`, `tuple`, or `str`") return subprocess.run(command, input=data) def yn(question, options="yn"): options = options.lower() options_display = f"[{'/'.join(options)}]" full_question = f"{question} {options_display} " response = "WILL NEVER OCCUR IN OPTIONS" while not response in options: response = input(full_question).lower().strip()[0] return response parser = argparse.ArgumentParser(description="Securely run a script from the Internet") parser.add_argument("url", help="URL of the script") parser.add_argument("-s", "--skip-pager", action="store_true", help="Skip pager and confirmation; run script immediately") args = parser.parse_args() url = args.url content = requests.get(url).content if args.skip_pager: launch("bash", content) else: launch("less", content) response = yn("Do you want to run this script?") if response == "y": launch("bash", content) else: print("Script not run.")