ïŒãã®ã³ã¡ã³ãããåŒãç¶ãïŒ
Re: 端æ«ã®çš®é¡
ããããšãããããŸãã端æ«åºæã®åé¡ã§ã¯ãªãããã§ãããåãæ¢ããä»ã®ç«¯æ«ã¯è©ŠããŠããã ããªããŠå€§äžå€«ã§ãããããã¡ãã§ã Fedora äžã® xfce4-terminal åã³ urxvt256c ã (Cygwin X Server ã§) 詊ããŠã¿ãŸããããã¯ãåçŸããŸãããâŠã
Re: ç°å¢å€æ°ã®éã
ç°å¢å€æ°ããããšãããããŸãã
Re: éå»ã®çã§ã¯åé¡ãªãã£ãã®ã
éå»ã®çïŒå°ãªããšã 18cd661ïŒã§ã¯åé¡ã¯ãªãã£ããšããããšãäŒããŠãããŸãã
æ å ±ããããšãããããŸããæå€ãšè¿ãã³ããããªã®ã§ãããšããæã®ç¹å®ã¯ãããªã«é£ãããªãããã§ãã
ããããªããïŒå®ãèšããšïŒè£å®ãããšç«¯æ«ãèœã¡ããšããåé¡ã¯ïŒéå»ã®çã§ãïŒããå°ãç¹æ®ãªæ¡ä»¶ã§çºçããŠããŸãã
æããåãåé¡ãªã®ã§ãããããäœããã®å€æŽã«äŒŽã£ãŠãããããé«ç¢ºçã§èµ·ããããã«ãªã£ããšããããšãªã®ã§ããããâŠã
Re: enhance-completeãã©ã³ã
確èªããããšãããããŸããcheckout & make ã¯ã瀺ãã®ã³ãã³ãã§å€§äžå€«ã§ããå®ã¯ãenhance-complete ã®æ¹ã« C-i (Tab) åšãã®ä¿®æ£ããã£ãã®ã§ãããããã¯é¢ä¿ãªãããã§ããããŸã TAB ãªã©ã®ããŒã®åãåãæ¹æ³ã (端æ«ã察å¿ããŠããå Žåã«) enhance-complete ã§ã¯å€æŽããã£ãã®ã§ãã
Re: ã«ãŒãœã«äœçœ®
- 以åŸ@ã¯ç¹å¥ã«æããªãéãã«ãŒãœã«ã®äœçœ®ã瀺ããã®ãšããŸããããèŠæãã»å€å¥ããããè¡šèšæ³ãªã©ãããŸãããæããŠããã ãããšå©ãããŸã
ãã®æšæ¿ç¥ããŸããã@ ã¯ç®ç«ã£ãŠè¯ãã®ã§åŒãç¶ã @ ã§ãé¡ããããæããŸãã
远å ã®ç¢ºèª
ãã¿ãŸããããææ°ããããããŸãã
$ bash --login ãšããŠå
¥ã£ãæã§ããåé¡ã¯çºçããªããªãã§ããããble-bind -m vi_imap -f C-t vi_imap/complete ãªã©ãšã㊠C-t çµç±ã§è£å®ãåŒã³åºããå Žåã§ãåçŸããã?ble-bind -m vi_imap -f C-i nop; ble-bind -m vi_imap -f TAB nop ãªã©ãšããŠãã TAB ãæŒããå Žåã§ãåçŸããã?complete -r ãå®è¡ããŠããã°ã©ã è£å®ã®èšå®ãã¯ãªã¢ããŠããå®è¡ããŠãåçŸããã?Bash ãã¯ã©ãã·ã¥ãããšããããšã§ããã°ãBash ã®ãã°ãèžãã§ããã ble.sh ãç¡éã«ãŒããèµ·ãããŠã¹ã¿ãã¯ãé£ãã€ã¶ããŠããããªã®ã§ã¯ãªãããšæããŸãããã¿ãŸããããããã¬ã§ç¢ºèªããé¡ãããŠãè¯ãã§ããããã
ãããã¬ã§ã®ç¢ºèªæ¹æ³
ç°å¢å€æ°ãèŠãæãã§ããš gdb å ¥ã£ãŠããŸã?
(端æ«1) åé¡ãçºçãããã·ã§ã«ã® PID ãç¢ºèª (以é PID 㯠12345 ã ã£ããšãã)
$ echo $$
12345
(端æ«2) å¥ã®ç«¯æ«ãããããã¬ãã¢ã¿ãããã
$ gdb
GNU gdb (GDB) Fedora 7.12.1-48.fc25
⊠(äžç¥) âŠ
(gdb) attach 12345 # âå
¥å
Attaching to process 23296
⊠(äžç¥) âŠ
(gdb) continue # âå
¥å
Continuing.
(端æ«1) å ã®ã·ã§ã«ã«æ»ãåé¡ãçºçããã
$ cat ~/ # ããã§ TAB
(端æ«2) ãããã¬ã§æ§åãèŠãããã Bash ãã¯ã©ãã·ã¥ããŠããã®ã ãšããã°äŸãã°ä»¥äžã®ãããªæãã«ãªã£ãŠããã®ã§ã¯ãªãããšæããŸãããããããªã info stack ã§è¡šç€ºãããã¹ã¿ãã¯ãã¬ãŒã¹ã®å
容ãç¥ãããã§ãã
Program received signal SIGSEGV, Segmentation fault. # äŸ
0xb7dddf56 in __strlen_sse2_bsf () from /lib/libc.so.6 # äŸ
(gdb) info stack # âå
¥å
@akinomyoga æ§
ãã¿ãŸããããææ°ããããããŸãã
ããïŒãã¡ãããïŒå·±ã®åé¡ã«ä»ãåã£ãŠããã ããŠç³ãèš³ãªãã§ãã
ãšããããïŒä»çãããããã®ã«è¿çããŠãããŸãã
Debian Projectã®å ¬åŒããã±ãŒãžã§ãããŸãïŒèªåã§ãã«ãã¯ããŠããŸãããæ ã«åã®ç°å¢ã«ã¯bashãšããã³ãã³ãã¯äžçš®é¡ããååšããªãçã§ãã
bash --loginãšããŠå
¥ãåã«èµ·åããå ŽåãŸãïŒããåãããªãç¶æ³ãå¢ããŠããŸããŸããâŠâŠããŸãïŒ
$ bash --login
èªäœã¯æåã*ïŒble.shãæ£åžžã«èªã¿èŸŒãŸããŠããŸãâ ããŸãïŒéåžžã«å
¥åããããšã¯å¯èœã§ãã
ããããªããïŒç¬¬1åŒæ°ãè£å®ããããšãããšSegmentation faultãçºçãïŒãšã©ãŒçªå·139ã§ç°åžžçµäºããŠããŸãïŒå
ã®ïŒã€ãŸãå
¥ãåã®èŠªïŒã®ã·ã§ã«ã«æ»ã£ãŠããŸããŸããåœç¶ãªããïŒãã®ã·ã§ã«ã§ã®ç¬¬1åŒæ°ã®è£å®ã¯æåããïŒç«¯æ«ãå·»ã蟌ãã§èœã¡ãŸãã
ã¡ãªã¿ã«ïŒãã¡ãã®ãã©ã³ãã§ã¯ïŒç¬¬1åŒæ°ã®å ¥åæã«äžæãªæ®µéã§ïŒå ¥åçŽåŸã§ã¯ãªãã§ãããŸãïŒè£å®ããŒãæŒäžããèš³ã§ããªãã§ãïŒå ¥åãåãã€ããããªããªãäžå ·åããã¡ãã®ç°å¢ã§ãããŸããããããæ¬issueã§ã¯è°è«ããïŒãŸãmasterãã©ã³ãã§ã®äžå ·åã§ã¯ãªãã®ã§å¥issueãç«ãŠãªãã€ããã§ãïŒãããé«é£è»ãªèšãæ¹ã«ãªã£ãŠããŸããŸããïŒãããŸããïŒã
ble-bind -m vi_imap -f C-t vi_imap/complete
ãšããèšè¿°ãbleshã®èšå®ãã¡ã€ã«ã«æžã蟌ãã§èµ·åããã®ã§ããïŒ
ble-bind: Unknown ble edit function `vi_imap/complete'
ãšããèŠåã衚瀺ãããŸããïŒèµ·åã¯ããŸããïŒ
ãŸãïŒçžå€ããè£å®ãããšèœã¡ãŸãã
$ ble-bind -m vi_imap -f C-i nop; ble-bind -m vi_imap -f TAB nop
ãå®è¡ããŠããè£å®ããããšããŸããã
èœã¡ãŸããã§ããïŒïŒãã¡ããè£å®ã¯ãããŸããã§ãããïŒåœç¶ã®æåã§ãããïŒ
èœã¡ãŸããã§ããïŒ ãããïŒäœã«ãã£ãŠãã¯åãããŸãããïŒ
$ cat /@
ãªã©ãšããã³ãã³ãã©ã€ã³ã§è£å®ããŒãæŒäžãããšãã¡ã€ã«ã»ãã£ã¬ã¯ããªãè£å®ãããŠãŸããã
ãããŸããïŒå°ã åŸ ã£ãŠãã ããã
* åã®ç°å¢ã§ã¯ïŒBashã®èšå®ãã¡ã€ã«ã¯ããŸãäžè¬çã§ã¯ãªãäœçœ®ïŒ~/etc/bash/init.bashïŒã«ããã®ã§ããïŒãããªã©ã§èšå®ããŠããããã³ããæååãªã©ããã£ãããšåæ ãããŠããã®ã§ïŒãïŒã³ãã³ããïŒæåããããšå€æããŸããã
â äžèšè泚ãšåæ§ã®çå±ã§ïŒæ§æåŒ·èª¿ãªã©ã®èšå®ãåæ ãããŠããŸããã®ã§ïŒãæ£åžžã«èªã¿èŸŒãŸããããšå€æããŸããã
ã¡ãã£ãšè¿œèšããŸãã
éèŠãªæ
å ±ã§ã¯ãªããšæããŸããïŒããŸãã«ç¡æèã«è¡ãªã£ãŠããŠïŒä»ïŒãã£ãšèªèŠããããšãªã®ã§å ±åããŸãã
端æ«ãšãã¥ã¬ãŒã¿ã«ãããŠïŒããã°ã€ã³ã·ã§ã«ãšããŠå®è¡ããšããæšã®èšå®ãããŠããŸããå€ãã®ç«¯æ«ãšãã¥ã¬ãŒã¿ã®æ¢å®ã®èšå®ã§ã¯ããã¯ãªã£ãŠããªãçã§ãïŒå°ãªããšãXfce4 Terminalåã³rxvt-unicode-256colorã§ã¯åŸããèšå®ããªããŠã¯ãªããŸããã§ããïŒã
ãããã°çµæã§ããïŒGDBã®èª¬æããã®ãããåãããããã£ãã§ãïŒïŒ
ãªãïŒGDBã®ä»æ§ïŒãšãããããæå³åœç¶ã§ããããïŒãã°ãã¡ã€ã«ã«åœä»€èªäœã®èšè¿°ããªãã®ã§ïŒé©å®ã©ããªæäœãè¡ã£ãããïŒ# (gdb)ãšããåèªãè¡é ã«ä»ãïŒå
¥åããå°ç¹ã«è¿œèšããŠããŸãã
gdb logfile
```log
Attaching to process 21896
Reading symbols from /bin/bash...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libtinfo.so.5...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...Reading symbols from /usr/lib/debug/.build-id/b8/95f0831f623c5f23603401d4069f9f94c24761.debug...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug/.build-id/aa/889e26a70f98fa8d230d088f7cc5bf43573163.debug...done.
done.
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug/.build-id/26/3f909dbe11a66f7c6233e3ff0521148d9f8370.debug...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libnss_compat.so.2...Reading symbols from /usr/lib/debug/.build-id/00/361e92218af1bbdcb64b955f4a999cb222536e.debug...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libnsl.so.1...Reading symbols from /usr/lib/debug/.build-id/01/a6959e0f750358e48a3636f9d8cc30a7414ce6.debug...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libnss_nis.so.2...Reading symbols from /usr/lib/debug/.build-id/d5/4501d3e5ca71dc139bd1fe35b6569dc1855617.debug...done.
done.
Reading symbols from /lib/x86_64-linux-gnu/libnss_files.so.2...Reading symbols from /usr/lib/debug/.build-id/9d/8b83eeddf7cb86ff2022d501a98c310bd4c75b.debug...done.
done.
0x00007f4893360441 in __pselect (nfds=1, readfds=0x7ffd3b0abdc0, writefds=0x0, exceptfds=0x0, timeout=
sigmask=0x7ffd3b0abd40) at ../sysdeps/unix/sysv/linux/pselect.c:69
69 ../sysdeps/unix/sysv/linux/pselect.c: ãã®ãããªãã¡ã€ã«ããã£ã¬ã¯ããªã¯ãããŸãã.
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x000000000042fe0e in restore_parser_state ()
(gdb) info stack
Detaching from program: /bin/bash, process 21896
ç·åãããš progcomp ã®ç¡éã«ãŒãã§ããâŠble.sh ã®ãã°ã§ããåé¡ã¯äœæ
ãã°ã€ã³ã·ã§ã«ã®ã¿ã§èµ·ããã®ããšããããšã§ãâŠãä»ãã調ã¹ãŸã
åãæ¢ããè¿çã§ã
ããããšãããããŸããLD_LIBRARY_PATH ãªã©ã«ããã©ã€ãã©ãªã®äžæŽåãšããèš³ã§ã¯ãªãããã§ããã
OKã§ããããã§æåã® Bash ã§åé¡ãèµ·ãããå ¥ãåã® Bash ã§åé¡ãèµ·ãããªãçç±ã確å®ããŸãããç°å¢å€æ°ã¯é¢ä¿ãªãããã§ãããŸããçµäºã¹ããŒã¿ã¹ 139 㯠SIGSEGV ãªã®ã§ããããèŠãããšããããšã¯ç«¯æ«ã¯é¢ä¿ãªããŠãåã« Bash ãã¯ã©ãã·ã¥ããŠããã®ã ãšããããšã確å®ã§ãã
ãããããã¡ãã§ bash --login ãšããŠãçžå€ãããåçŸããŸããâŠé£ããã§ã
端æ«ãšãã¥ã¬ãŒã¿ã«ãããŠïŒããã°ã€ã³ã·ã§ã«ãšããŠå®è¡ããšããæšã®èšå®ãããŠããŸãã
ã¯ãã倧äžå€«ã§ããããã¯ãããã¡ãªèšå®ãªã®ã§ãå
¥ãåã§èµ·åãããšå€§äžå€«ã ã£ãããšãããã®å¯èœæ§ãçã£ãŠ bash --login ã詊ããŠããã ããã®ã§ããã
第1åŒæ°ã®å ¥åæã«äžæãªæ®µéã§ïŒå ¥åçŽåŸã§ã¯ãªãã§ãããŸãïŒè£å®ããŒãæŒäžããèš³ã§ããªãã§ãïŒå ¥åãåãã€ããããªããªãäžå ·åããã¡ãã®ç°å¢ã§ãããŸããããããæ¬issueã§ã¯è°è«ããïŒãŸãmasterãã©ã³ãã§ã®äžå ·åã§ã¯ãªãã®ã§å¥issueãç«ãŠãªãã€ããã§ã
enhance-complete ã§ã¯èªåè£å® (ãšç§°ããŠèªåã§æšæž¬åè£ãåºãæ©èœ) ãå®è£ ããŠããŸããããããããšä»åã®åé¡ãšçžé¢ããŠãããããããªãã®ã§ãä»åã®åé¡ã解決ããŠãã #5 ã®æ¹ã«ãå ±åé ãããšå¹žãã§ããããããããããŸããã¡ãã§ã¯åçŸããŠããªãã®ã§ããŸããææ°ããããããããšã«ãªã£ãŠããŸãããã§ç³ãèš³ãããŸãããããããããé¡ãããããŸãã
ãšããèšè¿°ãbleshã®èšå®ãã¡ã€ã«ã«æžã蟌ãã§èµ·åããã®ã§ããïŒ
ble-bind: Unknown ble edit function `vi_imap/complete'
ãšããèŠåã衚瀺ãããŸããïŒèµ·åã¯ããŸããïŒ
ãã¿ãŸããã説æãå¿ããŠããŸãããblesh ã®èšå®ãã¡ã€ã«ã«æžãæã¯ã以äžã®ããã«èšè¿°ããŠãã ãããŸã (cf ç§ã®æ¹ã§ã¯ akinomyoga.dotfiles/blerc at master · akinomyoga/akinomyoga.dotfiles ã®æ§ã«èšå®ããŠããŸã)ã
ble/array#push _ble_keymap_vi_load_hook blerc/vim-load-hook
function blerc/vim-load-hook {
ble-bind -m vi_imap -f C-t vi_imap/complete
}
ãŸãïŒçžå€ããè£å®ãããšèœã¡ãŸãã
äºã€ç®
$ ble-bind -m vi_imap -f C-i nop; ble-bind -m vi_imap -f TAB nop
ãå®è¡ããŠããè£å®ããããšããŸããã
èœã¡ãŸããã§ããïŒïŒãã¡ããè£å®ã¯ãããŸããã§ãããïŒåœç¶ã®æåã§ãããïŒ
æ¿ç¥ããŸããããããšããŒå ¥åã®åãåããšãã³ãŒãã¯åé¡ãªãããã§ããè£å®ã®æ¹ã®åé¡ã§ãã
èœã¡ãŸããã§ããïŒ
æ¿ç¥ããŸãããããã°ã©ã è£å® (ãŠãŒã¶ã complete ã³ãã³ããçšããŠèšå®ããè£å®é¢æ°) ã®åŠçã«åé¡ãããããã§ãã
ãããïŒäœã«ãã£ãŠãã¯åãããŸãããïŒ
$ cat /@
ãªã©ãšããã³ãã³ãã©ã€ã³ã§è£å®ããŒãæŒäžãããšãã¡ã€ã«ã»ãã£ã¬ã¯ããªãè£å®ãããŠãŸããã
ãŠãŒã¶ã®æå®ããèšå®ããªããã°ãble.sh ã®èªåã®è£å®ãå®è¡ããã®ã§ããã
è£è¶³: "ãŠãŒã¶ã®èšå®" ãšæžããŸãããã倧äœãã£ã¹ããªãã¥ãŒã·ã§ã³ã®èšå®ã§ bash-completions ãããã°ã©ã è£å®ãèšå®ãããã®ã§ããã
ä»ããã³ãŒããèŠãŠæªããããªãšãããæŽããŸãããã¡ãã§åçŸã§ããŠããªãã®ã§ããŸããã¹ãããŠããã ãããšã«ãªããšã¯æããŸããããããããããããããŸãã
ããŒãããã¯ãåçŸã§ããªããšèŠåœãä»ããŸããâŠ
ãã¿ãŸãããæ¬¡ã®ç¢ºèªäºé ã§ã:
_cat() { :; }; complete -F _cat cat ãå®è¡ããŠãåé¡ãåçŸãããble.sh ãããŒãããªãå Žåã«ã¯åé¡ã¯èµ·ããªããšããããšã®ç¢ºèªç€ºãããŠããã³ãã³ããå®è¡ããŠããè£å®ããããšããŸãããïŒçžå€ããèœã¡ãŸãã
ããŒããã¯åãããããããããããŸãããâŠâŠãble.shãèªã¿èŸŒãŸãªããŠãåé¡ãçºçããŸãã
$ cat /@
ã§è£å®ããŒãæŒäžãããš
$ cat /-bash: äžèŽããŸãã: words[0]=${!ref}${COMP_WORDS[i]}
ãšãªããŸããããŸãïŒbashã®èšå®ãèªã¿èŸŒãŸãªãããã«ããŠïŒãã®éšåãã³ã¡ã³ãã¢ãŠãïŒble.shã®ã¿èªã¿èŸŒãããã«ãããšæ£åžžã«èµ·åãïŒè£å®ã«åé¡ããªããªããŸããã
ã»ããšãã«ãããŸãããå®å šã«ãã£ã¡ã®ãã¹ã§ãâŠâŠã
倿ããŸãããç¯äººã¯failglobã§ãã
ble.shãŸã£ããé¢ä¿ãªããŠã»ããšãããŸããã貎éãªãæéã䜿ãããŠããŸããŸããâŠâŠã
failglob 察ç㯠ble.sh ã®åŽã§ãããŠããã¯ããªã®ã§ãfailglob ã§èœã¡ãã®ã ãšããããã¯ã ble.sh ã®æ¹ãä¿®æ£ãããã§ããâŠ
ãšããããïŒglobé¢é£ã®èšå®ãæãåºããŸããããŸã åé¡ã®åãåããäžå®å šãªã®ã§ïŒæå°ã®æ§æã§ã¯ãªãïŒåé¡ã®æ žå¿ãšç¡é¢ä¿ãªèšå®ãæ··ãã£ãŠããïŒãšæããŸãã
shopt -s dotglob
shopt -s extglob
shopt -s nocaseglob
shopt -u nullglob
shopt -s globstar
shopt -u failglob
# shopt -s failglob
shopt -s globasciiranges
ãã®å ïŒfailglobãæå¹ã«ããŠèµ·åãããšæ¬issueã®æåã«ãªãçã§ãã
Q1 瀺ãããŠããã³ãã³ããå®è¡ããŠããè£å®ããããšããŸãããïŒçžå€ããèœã¡ãŸãã
ããŒããéã«äžæè°ã§ããâŠ
Q2
$ cat /-bash: äžèŽããŸãã: words[0]=${!ref}${COMP_WORDS[i]}
ãšãªããŸããã
ble.sh ãèªã¿èŸŒãŸãªãå Žåã¯ã¯ã©ãã·ã¥ãŸã§ã¯è¡ããªããšããããšã§ããããã
Re: failglob
ãã¡ãã§ shopt -s failglob ã詊ããŠã¿ãŸããããã¯ãåçŸããŸããã
çŸç¶ã«ã€ããŠç¢ºèªãããŠããã ãããã®ã§ããã
ble.sh ãšãã£ã¹ããªãã¥ãŒã·ã§ã³ã®èšå®ãäž¡æ¹èªã¿èŸŒãã åŸã§ shopt -u failglob ãèšå®ããå Žåã¯ã©ããªãã§ããããããšããããïŒglobé¢é£ã®èšå®ãæãåºããŸããã
ããŒãããã¡ãã§ã¯ãŸã åçŸããªãã§ã
$ shopt -p | grep glob
shopt -s dotglob
shopt -s extglob
shopt -s failglob
shopt -s globasciiranges
shopt -s globstar
shopt -s nocaseglob
shopt -u nullglob
ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®èšå®
ããã¯ïŒDebian ProjectïŒåã®å Žåã§ããïŒãäœæãã~/.bashrcã®ããšãšè§£éããŠããã§ããããïŒ
Debian Projectãäœæãã~/.bashrcãšble.shãåæã«èªã¿èŸŒãã äžã§èµ·åããŸãããèœã¡ãŸããã§ããã
shopt -pã®çµæïŒããã¯è£å®ã§å€±æããªãïŒçŸç¶ã®ãã®ã§ãïŒ
shopt -s autocd
shopt -u cdable_vars
shopt -s cdspell
shopt -s checkhash
shopt -s checkjobs
shopt -s checkwinsize
shopt -s cmdhist
shopt -u compat31
shopt -u compat32
shopt -u compat40
shopt -u compat41
shopt -u compat42
shopt -u compat43
shopt -s complete_fullquote
shopt -u direxpand
shopt -s dirspell
shopt -u dotglob
shopt -u execfail
shopt -s expand_aliases
shopt -u extdebug
shopt -s extglob
shopt -s extquote
shopt -u failglob
shopt -s force_fignore
shopt -s globasciiranges
shopt -s globstar
shopt -s gnu_errfmt
shopt -s histappend
shopt -s histreedit
shopt -s histverify
shopt -s hostcomplete
shopt -u huponexit
shopt -u inherit_errexit
shopt -s interactive_comments
shopt -u lastpipe
shopt -s lithist
shopt -s login_shell
shopt -u mailwarn
shopt -s no_empty_cmd_completion
shopt -s nocaseglob
shopt -u nocasematch
shopt -u nullglob
shopt -s progcomp
shopt -s promptvars
shopt -u restricted_shell
shopt -u shift_verbose
shopt -s sourcepath
shopt -u xpg_echo
ããã¯ïŒDebian ProjectïŒåã®å Žåã§ããïŒãäœæãã~/.bashrcã®ããšãšè§£éããŠããã§ããããïŒ
ãããã¿ãŸãããåéãããŠããŸãããhttps://github.com/cmplstofB/dotfiles/blob/master/etc/bash/init.bash#L11-L13 ã®éšåã Debian ç±æ¥ãªã®ããšæã£ãŠããŸããããããèŠããšããã¯ãŸãå¥ã®èšå®ãªã®ã§ããã
shopt -p ã®çµæããããšãããããŸããbash --login ã§èµ·åãã Bash (+ble.sh) ã«ããã貌ãä»ããŠå®è¡ããŠãæŽã« shopt -s failglob ãå®è¡ããŸããããããã§ããã¯ãåé¡ã¯åçŸã§ããŠããŸããã
ãã³ãã³ç³ãèš³ãããŸããã
complete -r; _cat() { :; }; complete -F _cat cat ãšããå Žåã«ã¯ãåçŸããã§ããããcomplete -r; _cat() { :; }; complete -F _cat catfailglobãæå¹ã«ããŠãç¡å¹ã«ããŠãïŒå€±æããŸããã
complete -r; _cat() { :; }; complete -F _cat catãã¿ãŸãããå¥ã®ä»äºãå
¥ã£ãŠæéã空ããŠããŸããŸããã_cat() { :; }; complete -F _cat cat ã§èœã¡ãããã©ããcomplete -r; _cat() { :; }; complete -F _cat cat ã§èœã¡ãªããšããã®ã¯ãã¯ãäžæè°ã§ãã
ããããããš _cat() { :; }; complete -F _cat cat ã§èœã¡ããšããã®ã¯ cat 以å€ã®ã³ãã³ãã®åŒæ°ã®å Žåã®ããšã§ãããããããããã§ãããããã¡ãã®æžãæ¹ããããã«ãããŠãã¿ãŸããã§ããã_cat() { :; }; complete -F _cat cat ã§è©ŠããŠããã ããæã¯ cat ~/@ ã«ãããŠèœã¡ããèœã¡ãªãã確ãããŠããã ããããšããæå³ã ã£ãã®ã§ããããã¿ãŸãã
ã»ããšãã«ãããŸãããåã®åéãã§ããã_cat() { :; }; complete -F _cat catãå®è¡ãïŒcatã³ãã³ãã®åŒæ°ãè£å®ãããšèœã¡ãŸããã
OKã§ã! ã ãšããã° ble.sh å
éšã§èœã¡ãŠãã®ã§ã¯ãªããŠãè£å®é¢æ° (æãã bash-completion; ãèªèº«ã§ã¯è£å®é¢æ°ã¯æžãããŠããªãã®ã§ããã?) ã®å
éšã§èœã¡ãŠããããªæ°ãããŸãããå床確èªã§ç³ãèš³ãããŸãã:
ble.sh ãèªã¿èŸŒãŸãªãå Žåã« failglob ãèšå®ããŠè£å®ãå®è¡ããæã®å€±æã¯ãBash ãèœã¡ãŸããããããšãåã«è£å®ãã§ããªãã ãã§çµãããŸããble.sh ã®æ¹ã§ããã¡ãã£ãš failglob ã«åœãã£ãŠãã·ã§ã«ãçµäºããªãããã«ã§ããªããåŒã£ãŠã¿ãŸã
ãèªèº«ã§ã¯è£å®é¢æ°ã¯æžãããŠããªãã®ã§ããã
ã¯ãïŒèªåã§ã¯æžããŠããŸããã
èœã¡ãŸãããã³ãã³ãã©ã€ã³ã«çãŸãããšãªãïŒæ¬¡ã®ã³ãã³ãã©ã€ã³ã«ç§»è¡ãã圢ã«ãªããŸãã
$ cat /@
# è£å®ããŒæŒäž
$ cat /-bash: äžèŽããŸãã: words[0]=${!ref}${COMP_WORDS[i]}
$ @
ã¡ãªã¿ã«ïŒçµäºç¶æ ïŒåçŽã«ã·ã§ã«å€æ°$?ã確èªããã ãã§ããïŒã¯1ã§ãã
ããããšãããããŸã! ãããããšãã¯ã ble.sh ã§ãçµäºããªãããã«ããã¹ãã§ãããäžåºŠä» workaround ãäœã£ãŠã¿ãŸããã
ble.sh ã« workaround è¿œå æ¬åœã«ããã§è§£æ±ºããã®ãèªä¿¡ããªãã®ã§ããã¿ãŸããããããã§ ble.sh ãš bash-completion (ãšæãããäœã) ã®äž¡æ¹ãããŒãããæã« shopt -s failglob ã«åœãã£ãŠãã·ã§ã«ãèœã¡ãªããã©ãã確èªããŠããã ããŸãããããããããããããããŸã
ãšããã§ bash-completion failglob ã§æ€çŽ¢ãããšããã«ã words[0]=${!ref}${COMP_WORDS[i]} ã«è©²åœããèšè¿°ãåºãŠããŸãã
ãã¯ã bash-completion ã®åé¡ã®ããã§ããããã¡ãã®ç°å¢ã§åçŸã§ããªãã£ãã®ã¯ bash-completion èªäœã«ä¿®æ£ãå
¥ã£ããšããããšãªã®ãããããŸããããã failglob ãš bash-completion ã䜵çšããã®ã§ããã° bash-completion ã®ææ°çã䜿ããšããã®ãæãããããŸããã
ç§ã®bash-completionã®ããŒãžã§ã³ã¯1.2.1ïŒDebian Projectã®ãã®ããã®ãŸãŸäœ¿ã£ãŠããŸãïŒã§ãããDebianã®å®å®æ¿ã䜿ã£ãŠããã®ã§å°ã å€ããããããŸããã
远èš
Fedoraææ°çã§ã®bash-completionã®ããŒãžã§ã³ã調ã¹ãŠã¿ããš2.8.3ã§ããâŠâŠãDebianã®ãããšã¯ããŒãžã§ã³äœç³»ãéãã®ã§ããããããããšãDebianã®ããã±ãŒãžããã®ãããå€ããã§ããããããã¡ãã£ãšèª¿ã¹ãŠã¿ãŸãã
ããããšãããããŸãïŒ failglobãæå¹ã«ããŠïŒbleshãèªã¿èŸŒãã§ãèœã¡ãªããªããŸããïŒ
ãšããã§bash-completionã®èªã¿èŸŒã¿ã«ã€ããŠã§ããïŒåã®å ŽåïŒDebianãã·ã¹ãã ã¯ã€ãã«æäŸããŠãã/etc/bash.bashrcãšãããã¡ã€ã«ããããŸããŠïŒããã§èªã¿ããã§ããããã§ããïŒåã¯bash-completionãèªåã§èªã¿èŸŒãã èŠãããªãã®ã§ïŒæ··ä¹±ããŠããŸããïŒ
ãã£ãšèª¿ã¹ãéãã§ããïŒããããããšãããã®ã¯Debianç³»åã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã ãã®ããã§ãããFedoraãªã©ã§ã¯ã·ã¹ãã ã¯ã€ããªã·ã§ã«é¢é£ã®èšå®ã¯/etc/profileãããªããã§ãããïŒ
確èªããããšãããããŸã! enhance-complete ã®æ¹ã«ãé©çšããŸããã
ãã£ãšèª¿ã¹ãéãã§ããïŒããããããšãããã®ã¯Debianç³»åã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã ãã®ããã§ãããFedoraãªã©ã§ã¯ã·ã¹ãã ã¯ã€ããªã·ã§ã«é¢é£ã®èšå®ã¯/etc/profileãããªããã§ãããïŒ
ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ãã£ãŠè²ã
ãªæ°ãããŸããFedora ã§ä»ç¢ºèªããŠã¿ãŸããã /etc/profile â /etc/bashrc â /etc/profile.d/*.sh ãèªã¿èŸŒãã§ããŸããâŠããã®äžã®ã²ãšã€ã« /etc/profile.d/bash_completion.sh ããã£ãŠãæŽã«ãããã bash-completion ã®æ¬äœ /usr/share/bash-completion/bash_completion ãåŒã³åºããŠããŸããã
äœãã«ããŠãå€ãã® (倧è¡çãª?) ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ãããã©ã«ãã§ bash-completion ã¯èªã¿èŸŒãŸããããã«ãªã£ãŠããããã«æããŸãã
åãæ¢ãããã® Issue ã¯éããŸããã
ïŒè¿œèšïŒé
ããšã d7fa31b ããïŒ
ãããŠããäžå
·åã®ãã£ã
$ cat <<. | xargs @
foo
bar
baz
.
ãšããã³ãã³ãã©ã€ã³ã«ãããŠã·ã§ã«ãèœã¡ãªããªã£ãŠããŸãããããããšãããããŸãã
ãå ±åããããšãããããŸã! ä»è©ŠããŠã¿ãŸããšé¡ã£ãŠãåçŸããŸãããâŠã
ããã Debian ã® bash-completion ãªã®ãããããŸãããã