Vader, из вашего комментария к исходному вопросу, вы хотели бы переключиться на интерактивную оболочку с полномочиями суперпользователя, правильно?
У Sudo есть специальный аргумент для запроса оболочки: [ ! d1]
-s [command]
The -s (shell) option runs the shell specified by the SHELL environment variable if
it is set or the shell as specified in the password database. If a command is
specified, it is passed to the shell for execution via the shell's -c option. If no
command is specified, an interactive shell is executed.
Это позволяет избежать уже упомянутых недостатков безопасности и позволяет «переходить в root» с помощью следующей команды:
sudo -s
ЕСЛИ мне действительно нужно запустить корневую оболочку ( в большинстве случаев я этого не делаю), то мне очень полезно иметь переменную окружения HOME из установленной оболочки (чтобы отразить запуск как «root»), это можно сделать, используя флаг «-H». Таким образом, полная команда будет
sudo -s -H
. Вы можете найти намного больше деталей в man-странице sudo.
Запустите цикл, создающий числа, и команда find -executed прочитает эти числа:
for ((i = 1; ; i++)); do echo $i; done |
find . -type f -name "randomseed.txt" -exec sh -c 'read i; echo $i > "$1"' _ {} \;
Вы также можете использовать seq:
seq 1 inf | find . -type f -name "randomseed.txt" -exec sh -c 'read i; echo $i > "$1"' _ {} \;
Вместо использования find вы можете включить globstar, чтобы заставить репликацию оболочки glubing
shopt -s globstar
cd в родительский каталог этой структуры, а затем проверить (переписать) запись files:
n=0; for i in **; do [[ -d "$i" ]] && echo "echo $((++n)) >" "$i"/randomseed.txt; done
Вы можете видеть, что он собирается писать файл в каждом каталоге на каждом уровне. Затем вы можете удалить лишнее эхо, чтобы на самом деле записать файлы:
n=0; for i in **; do [[ -d "$i" ]] && echo $((++n)) > "$i"/randomseed.txt; done
Возможно, вы захотите отключить globstar, когда это будет сделано:
shopt -u globstar