Có cách nào để bắt nguồn từ một tập lệnh sh từ vỏ cá không?


4

Tôi muốn đặt nhiều định nghĩa biến môi trường của tôi trong .profilekịch bản. Nếu tôi đang sử dụng trình vỏ tương tác tương thích POSIX như bash, tôi có thể sử dụng lệnh nguồn để xuất lại các biến môi trường từ .profilekhi được cập nhật mà không cần phải mở cửa sổ đầu cuối mới. Có cách nào để làm tương tự khi tôi đang sử dụng fish, sử dụng một cú pháp khác nhau để xuất các biến không? Tôi có thể bảo cá chạy một shchương trình con và xem lại bất kỳ biến nào mà nó định nghĩa không?

Khi tôi cố gắng làm rõ ràng, sh .profilecác biến môi trường dường như chỉ được xác định trong shquy trình con và không được cập nhật trong fishquy trình cha .


chỉnh sửa: mã shell xác định các biến của tôi là biến này

CAML_LD_LIBRARY_PATH="/home/hugo/.opam/4.01.0/lib/stublibs"; export CAML_LD_LIBRARY_PATH;
PERL5LIB="/home/hugo/.opam/4.01.0/lib/perl5:"; export PERL5LIB;
OCAML_TOPLEVEL_PATH="/home/hugo/.opam/4.01.0/lib/toplevel"; export OCAML_TOPLEVEL_PATH;
MANPATH=":/home/hugo/.opam/4.01.0/man"; export MANPATH;
PATH="/home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"; export PATH;

Thật không may, mã này được tự động tạo bởi một chương trình khác, vì vậy việc chuyển đổi thành Cá cũng phải được thực hiện bằng quy trình tự động. Tôi đã thử sử dụng tập lệnh sed sau đây

sed 's/\(.*\)="\(.*\)".*/set -x \1 \'\2\';/'

mà xuất ra mã cá sau đây

set -x CAML_LD_LIBRARY_PATH '/home/hugo/.opam/4.01.0/lib/stublibs';
set -x PERL5LIB '/home/hugo/.opam/4.01.0/lib/perl5:';
set -x OCAML_TOPLEVEL_PATH '/home/hugo/.opam/4.01.0/lib/toplevel';
set -x MANPATH ':/home/hugo/.opam/4.01.0/man';
set -x PATH '/home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games';

Mà tôi có thể chạy bằng cách sử dụng eval và ()thay thế

eval (my-sed-script)

Tuy nhiên, cá đang phàn nàn khi tôi cố gắng thiết lập PATH. Tôi nghĩ rằng nó có thể là PATH vỏ đặc biệt và mong đợi một mảng thay vì một chuỗi.

set: Warning: path component /home/hugo/.opam/4.01.0/bin:/home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games may not be valid in PATH.
set: No such file or directory
set: Did you mean 'set PATH $PATH /home/hugo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games'?

Không, bạn không thể. Một quá trình con không thể thay đổi môi trường của cha mẹ nó. Hiển thị định dạng .profile của bạn. Chúng tôi có thể dịch nó thành cú pháp cá hợp lệ, kết quả có thể là evaled
glenn jackman

@glennjackman: aw, thật tệ. Tôi đã chỉnh sửa câu hỏi để thêm thông tin bạn yêu cầu. Ngay bây giờ tôi vẫn cần tìm ra cách đặt PATH trong cá và cách tích hợp nó vào tập lệnh sed.
hugomg

Câu trả lời:



7

Để tìm nguồn cung cấp một shtập lệnh chung fish, một tùy chọn là plugin bass , có thể cung cấp nguồn biến môi trường của tập lệnh bash thành cá.

Nếu bạn có ngư dân , bạn có thể cài đặt với fisher edc/bass, sau đó làm bass source <command>.

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.