Как смонтировать SD-карту в формате NTFS с помощью pmount (или другого инструмента)?

Решение mikeserv хорошее, но он не прав в том, что fn передается строке trap $LINENO при выполнении ловушки. Вставьте строку перед trap ... и вы увидите, что fn на самом деле всегда передается 1, независимо от того, где была объявлена ловушка.

PS4='DEBUG: $LINENO : ' \
bash -x <<\EOF
    echo Foo
    trap 'fn "$LINENO"' EXIT             
    fn() { printf %s\\n "$LINENO" "$1"; }
    echo "$LINENO"
    exit
EOF

OUTPUT

DEBUG: 1 : echo Foo
Foo
DEBUG: 2 : trap 'fn "$LINENO"' EXIT
DEBUG: 4 : echo 4
4
DEBUG: 5 : exit
DEBUG: 1 : fn 1
DEBUG: 3 : printf '%s\n' 3 1
3
1

Поскольку первый аргумент ловушки, fn "$LINENO", заключен в одинарные кавычки, $LINENO получает расширение, если и только когда EXIT сработал и поэтому должен расшириться до fn 5. Так почему же этого не происходит? На самом деле так и было, вплоть до bash-4.0, когда он был намеренно изменен таким образом, что $LINENO сбрасывается в 1, когда срабатывает ловушка, и поэтому расширяется до fn 1. [источник] Однако для ловушек ERR сохраняется оригинальное поведение, вероятно, потому что часто что-то вроде trap 'echo "Error at line $LINENO"'. ERR используется.

#!/bin/bash

trap 'echo "exit at line $LINENO"' EXIT
trap 'echo "error at line $LINENO"' ERR
false
exit 0

OUTPUT

error at line 5
exit at line 1

проверено с GNU bash, версия 4.3.42(1)-release (x86_64-pc-linux-gnu)

0
28.04.2019, 19:23
1 ответ

Сразу после публикации этого вопроса я нашел ответ на StackExchange. Вместо pmount LABELмне нужно использовать udiskctl mount -b BLOCKDEVICE. Замените это в сценарии и адаптируйте правило udev, и оно заработает.

0
28.01.2020, 03:46

Теги

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