LINUX.ORG.RU

синтаксис не знаком

 ,


0

2

здравствуйте, мне понятно, что делает следующий скрипт:

echo -e "o\nn\np\n1\n\n\nw" | fdisk /dev/sda
т.е. выхлоп echo идет в fdisk через конвеер... но мне совершенно не понятно почему работает такой синтаксис:
(
echo o # Create a new empty DOS partition table
echo n # Add a new partition
echo p # Primary partition
echo 1 # Partition number
echo   # First sector (Accept default: 1)
echo   # Last sector (Accept default: varies)
echo w # Write changes
) | sudo fdisk
зачем тут скобки? где можно почитать что это за синтаксис?

Man bash, Compound Commands

anonymous ()

(info "(bash) Command Grouping")

3.2.4.3 Grouping Commands
.........................

Bash provides two ways to group a list of commands to be executed as a
unit.  When commands are grouped, redirections may be applied to the
entire command list.  For example, the output of all the commands in the
list may be redirected to a single stream.

'()'
          ( LIST )

     Placing a list of commands between parentheses causes a subshell
     environment to be created (*note Command Execution Environment::),
     and each of the commands in LIST to be executed in that subshell.
     Since the LIST is executed in a subshell, variable assignments do
     not remain in effect after the subshell completes.

'{}'
          { LIST; }

     Placing a list of commands between curly braces causes the list to
     be executed in the current shell context.  No subshell is created.
     The semicolon (or newline) following LIST is required.

   In addition to the creation of a subshell, there is a subtle
difference between these two constructs due to historical reasons.  The
braces are 'reserved words', so they must be separated from the LIST by
'blank's or other shell metacharacters.  The parentheses are
'operators', and are recognized as separate tokens by the shell even if
they are not separated from the LIST by whitespace.

   The exit status of both of these constructs is the exit status of
LIST.

— (info "(bash) Command Grouping")

Zmicier ★★★★★ ()

И да, это разумеется плохой выбор для задачи.

Zmicier ★★★★★ ()
Ответ на: (info "(bash) Command Grouping") от Zmicier

интересненько, а bluetoothctl управлять получится через такое?

пока встречал только конструкцию типа echo «scan on» | bluetoothctl

irton ★★★★★ ()
Ответ на: комментарий от anonymous

С Dbus есть странности, например при выполнении поиска устройств через Dbus (из скрипта с помощью dbus-send), поиск продолжается и команда выключения поиска, фактически его не выключает.

irton ★★★★★ ()
Ответ на: комментарий от irton

Ну тут надо либо проверять, что ты правильно понял документацию по API (как вариант, посмотреть, как сделано в штатной утилите), либо сообщать о баге, если с твоей стороны всё правильно. expect это такое себе решение при наличии более нормальных путей.

anonymous ()
Ответ на: комментарий от anonymous

разработчикам писал, сказали что после отправки команды через dbus-send, закрывается сессия соединения с dbus, а типа команду остановки надо отправлять из этой же сессии.

сейчас в bluez проскакивает что сделали shell режим, может это будет чем-то полезно, ждем-с.

irton ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.