создать псевдоустройство типа /dev/random, которое выводит простые числа?

findejecuta el comando -execen sí mismo, no involucra un shell. Incluso si lo hiciera, el cambio de directorio solo persistiría hasta que saliera ese shell, inmediatamente después del cd.

Deberá obtener el nombre del archivo en el shell actual para cdingresarlo. Dependiendo de qué tan malos sean sus nombres de archivo, podría usar la sustitución de comandos:

cd "$(find. -inum 888696)"

Eso no funcionará si el nombre del archivo termina en una nueva línea, ya que la sustitución de comandos consume nuevas líneas finales. En ese caso, necesitaría proteger la nueva línea y deshacerse de la que findagrega al imprimir:

dir=$(find. -inum 888696; echo x)
cd "${dir%?x}"

O, con GNU find, haga que no imprima la nueva línea final (pero aún proteja cualquiera en el nombre de archivo):

dir=$(find. -inum 888696 -printf "%px" -quit)
cd "${dir%x}"

También usando el predicado -quit(también una extensión GNU ), para dejar de buscar la primera coincidencia como una optimización.

Alternativamente, puede iniciar un nuevo shell desde find, pero es un poco feo:

find. -inum 888696 -exec bash -c 'cd "$1" && exec bash' sh {} \;
-1
16.06.2019, 23:26
1 ответ

То, что вы хотите, невозможно.

Символьные устройства предоставляются модулями ядра Linux.
Модули ядра Linux написаны на C.
Теоретически вы можете использовать язык программирования, отличный от C. Но ваша программа должна быть скомпилирована в двоичный файл, который можно загрузить в ядро. В частности, вам необходимо определить обработчик инициализации, обработчик выхода, а также функции dev_open, dev_read, dev_releaseс хорошо -определенными сигнатурами.
Вы не можете сделать это в Python (могут существовать поистине экзотические подходы, но я не знаю ни одного ).

Для получения дополнительной информации о том, как написать модуль ядра Linux на C, обратитесь к любому содержанию руководства,(не вставленному сюда из-за авторских прав ), которое вам нравится.

2
28.01.2020, 05:08

Теги

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