diff options
author | axel <axel@liljencrantz.se> | 2006-02-17 20:13:39 +1000 |
---|---|---|
committer | axel <axel@liljencrantz.se> | 2006-02-17 20:13:39 +1000 |
commit | 343cafef346543282b5b6e825bc8f9dd10028a48 (patch) | |
tree | 1bcf221ecb525c7aeadc8325e7b780d3656e544b /share/functions/psub.fish | |
parent | 95a01f3c8f15034433ffce368d8f2d13d925139c (diff) |
Redo installation file structure, move lots of things to $PREFIX/share/fish
darcs-hash:20060217101339-ac50b-d93d2c620a4b7f75f05ff461a6edbee001da7613.gz
Diffstat (limited to 'share/functions/psub.fish')
-rw-r--r-- | share/functions/psub.fish | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/share/functions/psub.fish b/share/functions/psub.fish new file mode 100644 index 00000000..fd59cd95 --- /dev/null +++ b/share/functions/psub.fish @@ -0,0 +1,54 @@ + + +function psub -d (_ "Read from stdin into a file and output the filename. Remove the file when the command that called psub exits.") + + set -l filename + set -l funcname + + if count $argv >/dev/null + switch $argv[1] + case '-h*' --h --he --hel --help + + help psub + return 0 + + case '*' + printf (_ "%s: Unknown argument '%s'\n") psub $argv[1] + return 1 + end + end + + if not status --is-command-substitution + echo psub: Not inside of command substitution >&2 + return + end + + # Find unique file name for writing output to + while true + set filename /tmp/.psub.(echo %self).(random); + if not test -e $filename + break; + end + end + + # Write output to pipe. This needs to be done in the background so + # that the command substitution exits without needing to wait for + # all the commands to exit + mkfifo $filename + cat >$filename & + + # Write filename to stdout + echo $filename + + # Find unique function name + while true + set funcname __fish_psub_(random); + if not functions $funcname >/dev/null ^/dev/null + break; + end + end + + # Make sure we erase file when caller exits + eval function $funcname --on-job-exit caller\; rm $filename\; functions -e $funcname\; end + +end |