Обходной путь - вычислить смещение раздела BSD в логическом разделе и использовать устройство цикла с смещение:
mount -t ufs -o loop,offset=8192,ro,ufstype=ufs2 /dev/sda6 /mnt
Механизм глобусной оболочки расширится *
до локального файла.
crontab, вероятно, будет иметь *
в качестве заполнителя для любого.
напр. эта строка в crontab запускается в 7:47 утра в воскресенье, первая звездочка означает любой день, вторая - любой месяц.
47 7 * * 0 /run/on/sunday
тогда вы tail
, и выдаете
echo 47 7 * * 0 /run/on/sunday
, который расширит *
до локального файла.
В вашей строке crontab есть одна или несколько звездочек *
, что означает «в любое время». Когда эта строка подставляется из подстановки команды, результат будет примерно таким:
echo * * * * * cmd > /path/to/file
В то время как большинство дополнительных расширений не применяются к выходным данным подстановки команд, расширение имени пути равно (, как и разделение полей):
The results of command substitution shall not be processed for further tilde expansion, parameter expansion, command substitution, or arithmetic expansion. If a command substitution occurs inside double-quotes, field splitting and pathname expansion shall not be performed on the results of the substitution.
Расширение пути — это то, что превращает *.txt
в список совпадающих имен файлов, (объединяющих ), где *
соответствует всему. Конечным результатом является то, что вы получаете каждое (не -скрытое )имя файла в рабочем каталоге, указанное для каждого *
в вашей строке crontab.
Вы можете исправить это, процитировав расширение, если опубликованный вами код представляет собой более сложную команду:
sudo bash -c 'echo "$(tail -n 1 /etc/crontab)" > /path/to/file'
, но проще просто потерять echo
полностью:
sudo bash -c 'tail -n 1 /etc/crontab > /path/to/file'
Это должно делать то, что вы хотите, и это также проще (единственное другое существенное отличие состоит в том, что в этой версии будет пропущено разбиение полей, которое в противном случае произошло бы, поэтому ряды пробелов не будут свернуты ).
Рассмотрим директорию с этими файлами:
$ ls
crontab file1 file2 file3
$ cat crontab
f*
Теперь запустим команду tail:
$ tail -n 1 crontab
f*
Это последняя строка crontab
, и это то, что мы ожидаем. Однако:
$ echo $(tail -n 1 crontab)
file1 file2 file3
Двойные -кавычки устраняют эту проблему:
$ echo "$(tail -n 1 crontab)"
f*
Без двойных -кавычек результат подстановки команды расширяется оболочкой. Одним из расширений является расширение имени пути . В приведенном выше случае это означает, что f*
расширяется, чтобы соответствовать каждому имени файла, начинающемуся с f
.
Если вы явно не хотите расширения оболочки, заключайте все переменные оболочки и/или подстановки команд в двойные кавычки.