Как включить файл при написании пользовательской справочной страницы?

В настоящее время я просто копирую исходный файл для моей пользовательской страницы руководства следующим образом:

SOURCE=man/myManPage.1
DEST_DIR=/usr/local/share/man/man.1
sudo install -g 0 -o 0 -m 0644 "$SOURCE" "$DEST_DIR/"
yes | sudo gzip "$DEST_DIR/myManPage.1"

Работает нормально.

Теперь я хочу иметь возможность включить файл, содержащий нижний колонтитул. Похоже, что использование макроса .so в исходном файле моей справочной страницы может быть одним из способов продвижения вперед:

.so footer.tmac

Макрос .mso может быть другим вариантом:

.mso footer.tmac

Проблема с обоими этими подходами я не запускаю groff при перемещении страницы man на место, я просто копирую исходный код в файл .gz, а файл включения отсутствует на пользовательской машине, поэтому нижний колонтитул не дисплей.

Возможно, мне нужно каким-то образом предварительно обработать исходный код man, чтобы сгенерировать полный файл?

2
задан 3 May 2019 в 22:50

2 ответа

Вот мое решение, использующее soelim как предложено @meuh:

#!/bin/bash

# Publishes man.1 files in ~/myman/
# Preprocesses .so statements by including the specified files

INCLUDED=included

function publish {
  SOURCE="~/myman/$INCLUDED/$1"
  if [[ ! -f "$SOURCE" ]]; then
    echo "Fatal: '$SOURCE' does not exist"
    exit 2
  fi

  I="${1##*.}"
  DEST_DIR=/usr/local/share/man/man${I}
  sudo mkdir -p ${DEST_DIR}
  sudo rm -f "$DEST_DIR/$1.gz"
  sudo install -g 0 -o 0 -m 0644 "$SOURCE" "$DEST_DIR/"
  echo "Creating $DEST_DIR/$1.gz"
  yes | sudo gzip "$DEST_DIR/$1"
}

cd "~/myman"
mkdir -p ${INCLUDED}
for CMD in *.1; do
  soelim -I ./ $CMD > $INCLUDED/$CMD
  pushd ${INCLUDED} > /dev/null
  publish "${CMD}"
  popd > /dev/null
done

sudo mandb

Вот исходный файл man с двумя директивами .so:

.TH man-course 1 "03 May 2019" "1.0" "cad-course man page"
.SH NAME
cad-course \- Cadenza Client command for authoring course content
.SH SYNOPSIS
cad course id aa | audioFromTitles | dw | fetch [-r] | gitNewRepo | publish | pp | status
.SH DESCRIPTION
\fBcad-course\fR is a Cadenza Client curriculum management command for authoring course-level content.
.so cad-description.tmac
.SH OPTIONS
The cad-course command takes sub-commands and options.
.SH EXAMPLES
  cad course 40 dw               # Launch DreamWeaver on content for course #40 (Intro to Scala)
.PP
  cad course 40 dw               # Launch DreamWeaver on content for course #40
.PP
  cad course 40 audioFromTitles  # Build a new Adobe Audition audio project from course #40 transcript titles
.PP
  cad course 40 gitNewRepo       # Wipe out any existing GitHub project for course #40 and make a new one,
check in current stuff. Use regular git commands as content is authored.
.PP
  cad course 40 fetch            # (Re)download all of the content for course #40's courses from the active database and the active S3 buckets.
If uncommitted changes to course's git repo, ask user if the changes should
be committed before fetching. If no git repo, makes one.
.PP
  cad course -r 40 fetch         # Also recurses by fetching sections & their lectures.
.so cad-footer.tmac

Вот cad-description.tmac:

The complete list of curriculum management commands is: cad-site, cad-group, cad-course, cad-section and cad-lecture.

Вот cad-footer.tmac:

.SH SEE ALSO
 cad-course(1),cad-group(1),cad-install(1),cad-lecture(1),cad-publish(1),cad-section(1),cad-site(1),cad-status(1),cad-status(1),bash(8)
.SH BUGS
No known bugs.
.SH AUTHOR
Michael Slinn (mslinn@micronauticsresearch.com)

Это вывод из man cad:

man(1)                                                                                 cad man page                                                                                man(1)

NAME
       cad - Cadenza Client command-line interface

SYNOPSIS
       cad install status  # TODO What other options might apply?

DESCRIPTION
       cad is a command-line interface for cadenzaClient

OPTIONS
       The cad command takes sub-commands and options.

EXAMPLES
       cad -h

SEE ALSO
        cad-course(1),cad-group(1),cad-install(1),cad-lecture(1),cad-publish(1),cad-section(1),cad-site(1),cad-status(1),cad-status(1),bash(8)

BUGS
       No known bugs.

AUTHOR
       Michael Slinn (mslinn@micronauticsresearch.com)

1.0                                                                                    03 May 2019                                                                                 man(1)
0
ответ дан 3 May 2019 в 22:50

Существует команда soelim , предоставленная с groff, чтобы сделать именно это.

soelim читает файлы и заменяет строки вида .so file содержимым файла.

0
ответ дан 3 May 2019 в 22:50
  • 1
    It' s не функция, that' s просто название любого виджета you' ре, подключающее акселератор с. I' ve пересмотрел его, чтобы быть более ясным. – Bryce 20 June 2012 в 23:06
  • 2
    It' s не функция, that' s просто название любого виджета you' ре, подключающее акселератор с. I' ve пересмотрел его, чтобы быть более ясным. – Bryce 20 June 2012 в 23:06
  • 3
    It' s не функция, that' s просто название любого виджета you' ре, подключающее акселератор с. I' ve пересмотрел его, чтобы быть более ясным. – Bryce 20 June 2012 в 23:06
  • 4
    It' s не функция, that' s просто название любого виджета you' ре, подключающее акселератор с. I' ve пересмотрел его, чтобы быть более ясным. – Bryce 20 June 2012 в 23:06
  • 5
    It' s не функция, that' s просто название любого виджета you' ре, подключающее акселератор с. I' ve пересмотрел его, чтобы быть более ясным. – Bryce 20 June 2012 в 23:06
  • 6
    It' s не функция, that' s просто название любого виджета you' ре, подключающее акселератор с. I' ve пересмотрел его, чтобы быть более ясным. – Bryce 20 June 2012 в 23:06

Другие вопросы по тегам:

Похожие вопросы: