Проблема заключалась во внутреннем кард-ридере, который, по-видимому, также был подключен через USB.
По-видимому, это связано с:https://bugzilla.kernel.org/show_bug.cgi?id=201997
Не выяснил, что такое "usb1". lsusb
по-прежнему показывает те же устройства, что и раньше.
rm -rf "`pwd`/folder"
— это плохо, и вы не должны его использовать. Это плохо только из-за углового случая, но этот угловой случай может оказаться проблемой безопасности, ведущей к удалению неправильного каталога. В крайнем случае, если текущий каталог заканчивается символом новой строки :, подстановка команды удаляет завершающие символы новой строки, поэтому, если текущий каталог /some/where/strange⏎
(, где ⏎ означает новую строку ), эта команда вместо этого удалит /some/where/strange
..
Вариант rm -rf "$PWD/folder"
не имеет недостатков по сравнению с использованием команды pwd
и имеет преимущество, состоящее в том, что он не страдает от углового случая завершающего символа новой строки. Каждая оболочка Bourne/POSIX обновляет переменную PWD
после каждого каталога -, изменяющего команду (cd
, pushd
и т. д. ), и она имеет то же значение, что и pwd
, встроенный -в выводах команды.. (Внешняя команда pwd
может иметь другой вывод, но 1. pwd
вызывает встроенную -, если она есть и она есть во всех обычных оболочках, и 2. нет никаких преимуществ в использовании внешней в любом случае командовать здесь.)
rm -rf "$PWD/folder"
не имеет преимуществ перед rm -rf./folder
. Его теоретический недостаток заключается в том, что rm -rf "$PWD/folder"
может превысить максимальную длину командной строки, в то время как rm -rf./folder
подходит. Однако максимальная длина командной строки почти всегда значительно больше, чем максимальная длина пути к файлу, поэтому почти всегда подходит команда с одним путем.
Использование "$PWD/$foo"
вместо "$foo"
имеет то преимущество, что оно гарантированно не начинается с тире, поэтому не будет выглядеть как опция . Это не проблема, если путь явно указан в скрипте, только если это переменная. И "./$foo"
предлагает такую же защиту. И "$PWD/$foo"
, и "./$foo"
верны только тогда, когда $foo
является относительным путем. Так что rm -rf "$PWD/$foo"
не имеет преимущества перед rm -rf "./$foo"
. И, как показано выше, если задействовано много путей, использование более короткой относительной формы может помочь избежать ограничения длины командной строки.
Использование "$PWD/folder"
имеет явное преимущество перед "./folder"
, если вы сохраняете его в переменной для последующего использования. :он сохраняет назначение одного и того же файла, даже если скрипт тем временем переходит в другой каталог. Хотя с rm -rf "./folder"
все в порядке, для такого кода требуется абсолютный путь:
output_directory="$PWD/output"
# If interrupted, delete the partial output.
trap 'rm -rf "$output_directory"; exit 1' HUP INT TERM
do_stuff >"$output_directory/file1"
do_more_stuff >"$output_directory/file2"
cd "$output_directory"
further_stuff file1 file2 >file3
Если бы $output_directory
был относительным путем, код очистки мог бы работать до команды cd
или после, но не одновременно.