Skip to main content

A python module for sourcing variables from shell scripts

Project description

python-shell-source

A python module for sourcing variables from shell scripts.

Installation

$ pip install shell-source

Documentation

The full documentation is available here

Usage

This module provides a function source which attempts to mimic the shell's source command.

The purpose of this function is to allow you to run a shell script which sets either environment variables or local variables, and then give you access to those variables. Normally this is not a straght-forward task, but this function achieves it by running the script in its intended shell then injecting commands to the shell to print its local variables and its environment variables. Finally it collects the shell's stdout and parses it to return to you with exactly the data you asked for.

Basic Usage

If you just pass a script and an interpreter you'll get back all the environment variables and local variables visible to and set by the script.

>>> from shell_source import source
>>> variables = source("path/to/script.sh", "bash")
>>> # It returns a dictionary of local and environment variables known by the script.
>>> variables
{"USER": "abraham", "PATH": "/bin:/usr/bin", ..., "foo": "bar"}

Requesting Specific Variables

If you specify the argument variables, then only those variables you passed will be present as keys in the returned dictionary.

>>> source("path/to/script.sh", "csh", variables=("foo", "bar", "biz"))
{"foo": ..., "bar": ..., "biz", ...}

Ignoring Local Variables

If you don't want to obtain any local variables set by the script, but only want the environment variables, you can pass ignore_locals=True.

Supporting Different Shells

This module has been tested to work with bash, zsh, csh, tcsh, ksh, and fish. You can use any other shell that's somewhat posix compliant and supports the keyword "source", but it it doesn't work, you may use the ShellConfig class to indicate to source how to interact with your shell.

The class ShellConfig contains several string templates which are used to run the necessary commands with the shell. If the shell you want to use doesn't support any of the commands set by default in that class, you can pass an instance of ShellConfig to source to override the default templates.

For example, imagine you have a strange shell that uses @foo instead of $foo to get the value of the variable foo, and that redirects the output of a command like this:

$ redirect 'echo hello' to /path/to/file

You would call source like this to tell it how to interact with your shell:

source(
	"path/to/script.sh",
	"myshell",
	shell_config=ShellConfig(
		redirect_stdout="redirect '{cmd}' to {file}",
		get_var="@{var}",
	)
)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shell-source-0.1.1.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

shell_source-0.1.1-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file shell-source-0.1.1.tar.gz.

File metadata

  • Download URL: shell-source-0.1.1.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.8 CPython/3.7.13 Linux/5.13.0-1025-azure

File hashes

Hashes for shell-source-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3a5ef67ddabd19db5b2d842c1e91609b0ad7b544eeee15382877644cf66cd4d4
MD5 9b0b7bf04ad5eedf769bf8a61f192ddd
BLAKE2b-256 e624447531182c80f2f8054cf0f061d63388189246688d58982e7127be400e26

See more details on using hashes here.

File details

Details for the file shell_source-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: shell_source-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 5.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.8 CPython/3.7.13 Linux/5.13.0-1025-azure

File hashes

Hashes for shell_source-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d9c7eea138db178f0c5f3c903831d8c9548823180364202885d2adc784dc122d
MD5 c03c9e2c0b3760ce773b67d0416625fb
BLAKE2b-256 950c03a2caef50972ce445261ac008d26bc24b9788051a70c0ee1dd96fe5bac1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page