Một chút bối cảnh, câu hỏi này là phần tiếp theo của câu hỏi này: Tự động hoàn thành từ xa Bash: thay đổi thư mục 'bắt đầu'
Dù sao, tôi đang viết kịch bản bash tự động hoàn thành tùy chỉnh của mình: Tôi muốn tự động hoàn thành hoạt động giống như cdvậy, ngoại trừ việc tôi muốn lấy tên từ một thư mục cụ thể, không nhất thiết phải là tên hiện tại. Nó hoạt động tuyệt vời trừ khi tên tập tin có không gian trong đó.
Một ví dụ nhanh. Giả sử thư mục tôi nhận được tên từ đó có hai tệp trong đó: a_filevà another file(chú ý khoảng trắng). Điều này xảy ra:
my_commandTABTAB
a_file
file
another
Bài thuyết trình không hoàn hảo nhưng ý tưởng là tôi được nhắc với 3 lựa chọn, another fileđược chia thành anothervà file. Đầu ra mong muốn sẽ là :
file_1 another file. Tôi cũng muốn các không gian được thoát tự động:
my_command anoTAB
my_command another\ file
Đây là kịch bản của tôi.
#! / bin / bash
_get_file_list ()
{
dir = "/ một số / đường dẫn /"
cd $ dir
tìm * -maxdepth 0
}
_GetOptMyCommand ()
{
cur địa phương
TƯƠNG THÍCH = ()
cur = $ {COMP_WORDS [COMP_CWORD]}
trường hợp "$ cur" trong
- *)
COMPREPLY = ($ (compgen -W "-h -l --help --list -" - "$ cur")) ;;
*)
COMPREPLY = ($ (compgen -W "$ (_ get_file_list)" - "$ cur")) ;;
esac
trả về 0
}
hoàn thành -F _GetOptMyCommand my_command
Làm cách nào để xử lý các khoảng trắng trong tên tệp và tạo tập lệnh tự động hoàn thành của tôi như thế cdnào?
local IFS=$'\n'dường như là những gì bạn đang tìm kiếm. Đó là những gì làm việc cho tôi.