Bí danh Bash với một khoảng trắng là một phần của lệnh


11

Tôi đang cố gắng tạo ra một bí danh bash, trong đó chính bí danh có một khoảng trống trong đó.

Ý tưởng là bí danh (nghĩa là con) là viết tắt của sudo openvpn --config /path/to/my/openvpn/configs/. Mà kết quả trong một lệnh có thể đọc được, khi conbí danh được sử dụng.

I E: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

Tôi hiểu rằng tôi không thể khai báo bí danh như thế này : con ="sudo openvpn --config /path/to/my/openvpn/configs/". Các hàm bash sẽ hoạt động trong kịch bản này? Tôi chưa bao giờ nghe về điều đó, nhưng khi nghiên cứu một giải pháp cho vấn đề nhỏ này.

Câu trả lời:


12

Có, bạn sẽ cần phải sử dụng một chức năng. Một bí danh sẽ hoạt động nếu bạn muốn thêm một tham số, bất kỳ đối số nào được cung cấp cho bí danh đều được truyền dưới dạng đối số cho chương trình bí danh nhưng là tham số riêng biệt , không chỉ đơn giản là gắn vào những gì có ở đó. Để minh họa:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz

Như bạn có thể thấy, những gì đã được lặp lại bar bazvà không barbaz. Vì bạn muốn nối giá trị bạn chuyển đến tham số hiện có, bạn sẽ cần một cái gì đó như:

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }

Thêm dòng trên cho bạn ~/.bashrcvà bạn đã sẵn sàng để đi.


4
Bạn cũng có thể sử dụng "$@"thay vì "$1"để các đối số tiếp theo cũng được chuyển qua. (Nhận xét chung, có thể không liên quan đến trường hợp cụ thể ở đây)
Toby Speight

@TobySpeight'oh! Tôi cần phải có suy nghĩ về điều đó. Cảm ơn, chỉnh sửa.
terdon

1
@TobySpeight chỉ để làm rõ, điều đó có nghĩa là com uk.conf -something elsesẽ dịch sang sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH

4
@TomHart có. $@chứa tất cả các tham số đã cho. Xem sự khác biệt giữa $ * và $ @ là gì? .
terdon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.