bashfs
is a pyfuse3-based filesystem that allows you to interact with your favorite command line applications from the filesystem. For example:
/ $ mkdir mnt
/ $ python -m bashfs mnt &
/ $ cd mnt
/mnt $ cat 'ls -a/run'
.
..
bashfs
.git
.gitignore
mnt
README.md
translator.py
/mnt $ cd 'ls -a'
/mnt/ls -a $ cd 'grep t'
/mnt/ls -a/grep t $ cat run
.git
.gitignore
mnt
translator.py
By default, paths are passed to bash -c
with slashes replaced with pipes. You can change this behavior via command-line options to bashfs:
/ $ mkdir mnt
/ $ python -m bashfs mnt --argv-prefix=python --argv-prefix=-c --separator='
' &
/ $ cd mnt
/mnt $ cd 'a = "hello"'
/mnt/a = "hello" $ cd 'print(a)'
/mnt/a = "hello"/print(a) $ cat run
hello
Certain characters are not allowed in paths; for example, a slash cannot be entered without being interpreted as a path separator. bashfs
allows you to escape these characters by inserting an exclamation point (!
) before the desired character XORed with 0x40. For example, to enter a slash, !o
would be used, because 'o' = 0x6F = 0x2F ^ 0x40 = '/' ^ 0x40
:
/ $ mkdir mnt
/ $ python -m bashfs mnt &
/ $ cd mnt
/mnt $ cat '!obin!ols -a/run'
.
..
bashfs
.git
.gitignore
mnt
README.md
translator.py
bashfs
requires pyfuse3
; however, it needs a particular feature which is currently pending upstreaming. See this pull request for more information.
After a compatible version of pyfuse3
is installed, no other installation should be necessary; bashfs
should be runnable from wherever it is cloned.
Why not?