Bash 경로 완성은 sudo와 어떻게 작동합니까?


11

탭 경로 완성이 작동하지 않습니다 (적어도 우분투 및 AFAIK 아치에서는)

sudo mount <whatever>

마운트하려는 iso 파일이에 없습니다 /etc/fstab. 방금 입력하면

mount <whatever>

완료가 작동합니다 (물론 명령은 루트가 아니므로 실패합니다). 분명히 그것은 그것을 sudo깨뜨립니다.

sudo로 완성 작업을 어떻게 할 수 있습니까?

와 함께 놀라운

sudo umount <whatever>

완성 작품. 어떻게 달성됩니까? 그것은 조사합니까 /etc/fstab?

해결책 : 인수에 전달 된 쉘 스크립트를 /usr/local/bin호출에 넣었 sudo mount ...습니다. sudo방해 가 없기 때문에이 스크립트를 호출 할 때 완료가 작동합니다 .

답변:


11

이것은 전혀 관련이 bash없지만 패키지에 프로그래밍 된 완료에 따라 다릅니다 bash-completion.

파일의 일부 주석에서 /etc/bash_completion.d/mount:

# mount(8) completion. This will pull a list of possible mounts out of
# /etc/{,v}fstab, unless the word being completed contains a ':', which
# would indicate the specification of an NFS server. In that case, we
# query the server for a list of all available exports and complete on
# that instead.
#

# umount(8) completion. This relies on the mount point being the third
# space-delimited field in the output of mount(8)
#

또한 주 파일 /etc/bash_completion에서 명시 적으로 설명 mount하고 umount명령 하는 다음 주석 을 찾을 수 있습니다 .

# A meta-command completion function for commands like sudo(8), which need to
# first complete on a command, then complete according to that command's own
# completion definition - currently not quite foolproof (e.g. mount and umount
# don't work properly), but still quite useful.
#

업데이트 :
에 대한 의견 mountumount에서 명령을 제거 bash_completion (가)에서 커밋 :

_command_offset: Restore compopts used by called command.

This fixes completions that rely on their compopts, most notably
mount(8).
Fixes bash-completion bug #313183.

출시bash-completion 1.90


4

Arch Wiki를 살펴보면 쉽게 해결할 수 있습니다 .

과 같은 명령을 입력 한 후 자동 완성 기능 (키보드에서 Tab 키를 두 번 누름)을 사용하는 것이 유용합니다 sudo.

이렇게하려면이 형식의 줄을 ~/.bashrc파일에 추가하십시오.

완료 -cf your_command

예를 들어 sudoman다음에 자동 완성 기능을 사용하려면 다음을 수행하십시오 .

complete -cf sudo
complete -cf man

감사. 의 경우 자동 완성 기능이 놀랍도록 잘 작동합니다 sudo umount. enzotib이 지적 했듯이이 기능은 고장 났 mount으며 마지막으로 확인했을 때 Arch에서도 손상되었습니다.
Ali

방금 아치에서 이것을 시도하고 sudo mount / me <TAB> /etc/fstab은 / media로 시작하는 구성한 유일한 경로로 완료됩니다 .
Wieland

내 경우에는, 내가 마운트 시도하고있는 파일입니다 하지/etc/fstab. 이것 좀 확인해 주시겠습니까?
Ali

0

아니요, fstab에서 보이지 않습니다. Bash complete는 경로의 명령, bashrc 및 / 또는 bash_profile의 별칭 및 경로를 찾습니다. 당신이 같은 sudo mount /mnt/some_folder것을 입력 하면 자동 완성해야합니다. 어쩌면 당신이 당신을했을 때 당신은 umount목적지의 상대 경로에 있었고 자동 완성을했습니다.


감사. 자동 완성 기능이 sudo mount /mnt/some_folder100 % 확실 하지 않다고 확신합니다. AFAIK 그것은 아치 리눅스에서도 작동하지 않습니다. 내가했을 때 나는 umount목적지의 상대 경로에 없었습니다.
Ali

-1

bash는 너무 복잡하고 이식성이 떨어지기를 원하지 않기 때문에 / dev에서 마운트 작업 완료를 제안하지 않습니다.

그러나 umount를 호출하면 df / mount / etc의 출력을 쉽게보고 마운트 된 장치와 위치를 알 수 있습니다.

아마도 zsh는 마운트 완료를 제공하고, scp 명령을 수행 할 때 자동 완성 zck도 제공합니다 ...


마운트하려고하는 파일은 내 홈 디렉토리의 iso 파일입니다. 완료가 작동하지 않습니다. 아, 내가 sudo를 사용하지 않으면 마운트 작업으로 완성을 잊어 버렸습니다. 그것을 깨는 것은 sudo입니다. 이견있는 사람?
Ali

절대 경로를 사용합니까? / home / user / myiso <TAB>-> myisofile.iso. sudo echo로 디버그 $ SHELL; sudo pwd, 잘하면 통찰력을 줄 것입니다.
Aki

예, 절대 경로가 있습니다. 나는 당신이 제안한 디버깅을 시도 할 것입니다. 제안한 디버깅 /bin/bash /home/ali은 예상대로 제공 됩니다.
Ali
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.