POSIX sh вопросы (printf и 'read -n') - PullRequest
       20

POSIX sh вопросы (printf и 'read -n')

0 голосов
/ 24 сентября 2018

Я пытаюсь написать сценарий POSIX, без каких-либо ошибок.И я столкнулся со следующими проблемами, которые не могу решить самостоятельно:

  1. Я знаю, что это глупый вопрос, но до сих пор я не совсем понимаю, как я могу объединить эти две командыв одном.

     printf ' Port: '
     printf %s "$request" | xmllint --xpath 'string(/Server/Port)' -
    

    Возможно ли это?

  2. У меня есть следующий блок в моем скрипте:

     printf '\n\n\nGo? (Y) '
     read -n 1 y
     printf '\n\n'
     case $y in
              y|Y ) printf %s "$request" | xmllint --format - ; printf '\n';;
     esac
    

    Но в POSIX -n в read -n 1 y не определено.Можно ли сделать это в POSIX?

1 Ответ

0 голосов
/ 24 сентября 2018

Чтобы прочитать 1 символ в режиме POSIX, вы можете сделать

y=$(dd bs=1 count=1 2>/dev/null)

(y=$(head -c 1) тоже не POSIX.) Подробнее о https://unix.stackexchange.com/questions/464930/can-i-read-a-single-character-from-stdin-in-posix-shell

Вы можете комбинировать

printf ' Port: '
printf %s "$request" | xmllint --xpath 'string(/Server/Port)' -

с && или ; или новой строкой, как у вас.

Как chai-t-rex указал,

printf ' Port: %s' "$(printf %s "$request" | xmllint --xpath 'string(/Server/Port)' -)"

также возможно, но это не дает никакой выгоды.Все, что он делает, это немного реорганизует ваш код, в то же время вводя умеренную пессимизацию производительности из-за запуска ненужного процесса подстановки команд.

...