Это может быть неприятный вариант, но вы можете использовать w3m
в качестве браузера для вывода HTML man
:
BROWSER=w3m man -H bash
Он отображает «…» '
с использованием кавычек Unicode (как и Google Chrome, но по какой-то причине lynx
этого не делает).
В репозитории man-страниц FreeBSD говорится, что man
CentOS 7 поддерживает -H
.
Невозможно создать исполняемый файл только с помощью оператора перенаправления оболочки. Нет переносимого способа, как и в bash (в исходном коде вы можете видеть, что перенаправление вызывает do_redirection_internal
, который вызывает redir_open
с параметром ] режим
установлен на 0666, и это, в свою очередь, вызывает open
с этим режимом).
Вы все равно вызываете команду оболочки, поэтому добавьте ; chmod + x…
где-то там. В этом нет абсолютно ничего плохого. Еще одна строчка кода - не проблема. Вам нужно сделать три вещи (создать файл с заданным содержимым, сделать файл исполняемым, выполнить его), поэтому напишите три строки.
Существует относительно малоизвестная команда оболочки, которая может создать исполняемый файл с определенным содержимым: uudecode
. Но я бы не рекомендовал его использовать: он требует, чтобы ввод был передан в нечитаемом формате, он обходит маску пользователя и непонятен.
Разумная альтернатива - вызвать bash / the / script
вместо chmod + x / the / script && chmod + x
, если вы знаете, с каким интерпретатором запускать файл с .
Функция для создания исполняемого сценария оболочки из переданного по трубопроводу ввода:
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?