Функция для создания исполняемого сценария оболочки из переданного по трубопроводу ввода:
pipe2script() { touch "$1" ; chmod +x "$1" ; \
echo '#!'"$(which ${2:-bash})" > "$1" ; cat >> "$1" ; }
Используйте pipe2script
для передачи двух строк текста в foo.sh
:
printf 'echo hello world\necho bye\n' | pipe2script foo.sh
Это выводит новый исполняемый файл, foo.sh
:
$ ls -log foo.sh
-rwxrwxr-x 1 38 Mar 18 09:05 foo.sh
Выполнение cat foo. sh
показывает:
#!/bin/bash
echo hello world
echo bye
Запуск:
./foo.sh
Выход:
hello world
bye
Функция pipe2script
по умолчанию использует bash
, но она может принимать в качестве второго аргумента любое другое имя оболочки, т.е. bash
. например, dash
, zsh
, ksh93
, python
и т. д. Пример использования команды fish
оболочки math
:
printf 'math "99^33"\n' | pipe2script foo.fish fish
Выполнение cat foo.fish
показывает:
#!/usr/bin/fish
math "99^33"
Вывод ./foo.fish
:
717730532598275105894510914059816191752829524684539601273450723299
Редактирование копии скрипта:
sed '2,${s/.*/echo & | jethro/e;s/ / "/;s/$/"/}' foo.sh | pipe2script foojc.sh
Вывод при выполнении:
$ ./foojc.sh
howdy world
y'all come back now, heah?