Игнорировать автоматическое завершение на одно и то же имя файла

Я использовал qemu + QEmu Monitor для монтирования дискет и чтения необработанных данных с помощью dd.

Запишите ваш файл по одной дискете за раз с помощью dd или split:

Примечание: Возможно, вам потребуется разбить на тома по 1474560 (именно таким является /dev/rdsk/f03ht).

Вы можете также попробовать использовать compress.

# Archive the files you wish to send using `tar` (supported on SYSV). 
$ ls -la test.tar
----------+ 1 cmihai None 5901312 Dec  2 20:55 test.tar

# Split into 1.44MB volumes
$ split -b 1478656 test.tar test_floppy_

$ ls -la test_floppy*
-rw-r--r--+ 1 cmihai None 1478656 Dec  2 21:10 test_floppy_aa
-rw-r--r--+ 1 cmihai None 1478656 Dec  2 21:10 test_floppy_ab
-rw-r--r--+ 1 cmihai None 1478656 Dec  2 21:10 test_floppy_ac
-rw-r--r--+ 1 cmihai None 1465344 Dec  2 21:10 test_floppy_ad

Смонтируйте дискету в qemu.

Нажмите Ctrl + Alt + 2 в qemu, чтобы использовать монитор qemu.

change floppy0 test_floppy_aa
info block

Вернитесь в терминал, нажав Ctrl + Alt + 1

Примечание: Возможно, для проверки нам следует читать с необработанного устройства /dev/rdsk/f03ht, а не с блочного....

dd if=/dev/dsk/f03ht of=test_floppy_aa
dd if=/dev/dsk/f03ht of=test_floppy_ab
...

Распаковываем

cat a b c | tar -tvt test_floppy_* # test..
cat a b c | tar -xvt test_floppy_*

Другие идеи

  • qemu-system-i386 -hda sysv.img -hdb test.tar и читаем с помощью dd с /dev/rdsk/1s1 (я полагаю... 0s0 - это корневой диск). Вы также можете попробовать `fdisk /dev/rdsk/1s1'.
  • Добавить в конец существующего образа диска, и прочитать с помощью dd :D. (безумие...)
  • Возможно, потребуется использовать устройства /dev/fd или /dev/rdsk...
  • Конвертация из RAW в VMDK (используемый VMware и VirtualBox): qemu-img convert -O vmdk sysv.img sysv.vmdk. Теперь мы можем попробовать проверить, поддерживаются ли драйверы сетевых карт VMware или VirtualBox...
  • Попробую kermit / tip / cu, как только найду дискету, содержащую их и /dev/, которые мне нужно использовать...

Примечания:

  • tar может читать непосредственно с /dev/dsk/f03ht. Например: tar -tvf /dev/dsk/f03ht. Возможно, стоит попробовать создать многотомную дискету и забыть о части dd... WIP :-).

5
16.09.2018, 08:29
1 ответ

Одним из решений является использование опции nospaceдля встроенной функцииcomplete.

Во-первых, вам нужно знать, как определяется завершение дляls

$ complete -p ls
complete -F _longopt ls

Затем вы изменяете его, добавляя-o nospace

$ complete -o nospace -F _longopt ls

Таким образом, даже если вы нажмете Tab ↹ несколько раз, совпадения не будет, и аргумент не будет добавлен в командную строку.

Побочный эффект:вам нужно вручную добавить пробел в конце строки, если вы хотите добавить еще один аргумент к ls.

Чтобы избежать этого побочного эффекта, вы можете изменить функцию _longoptтаким образом, чтобы она не совпадала с одним и тем же аргументом дважды (это может быть непросто ).

Как применить это к другим командам и сделать постоянным

Добавление пробела после совпадения является поведением по умолчанию. Я не знаю, есть ли другой способ, кроме использования -o nospaceпри указании правил завершения с помощью complete.

Более того, имейте в виду, что правила завершения где-то указаны, даже для встроенных команд (на моем ноутбуке в этой папке:/usr/share/bash-completion). Если вы посмотрите файл /usr/share/bash-completion/bash-completion, вы найдете, где определены завершения дляls:

complete -F _longopt a2ps awk base64 bash bc bison cat chroot colordiff cp \
  csplit cut date df diff dir du enscript env expand fmt fold gperf \
  grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
  mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
  sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
  texindex touch tr uname unexpand uniq units vdir wc who

Вы видите, что одни и те же правила применяются для целой группы различных команд (, таких как cp, mv, rm... ), поэтому, если вы измените это, добавив -o nospace, изменение повлияет на lsи все остальные команды.

Если вам неудобно изменять глобальные настройки (, вам потребуются привилегии суперпользователя ), вы можете записать их в~/.bash_completion(создать этот файл, если он отсутствует ), вот так

complete -F _longopt -o nospace a2ps awk base64 bash bc bison cat chroot colordiff cp \
  csplit cut date df diff dir du enscript env expand fmt fold gperf \
  grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
  mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
  sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
  texindex touch tr uname unexpand uniq units vdir wc who

Если вы хотите изменить дополнения для других команд, не перечисленных здесь, просто найдите их в файле /usr/share/bash-completion/bash-completionили папке /usr/share/bash-completion/completions.

3
27.01.2020, 20:41

Теги

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