Tôi muốn đặt nhiều định nghĩa biến môi trường của tôi trong .profile
kị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ừ .profile
khi đượ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 sh
chươ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 .profile
các biến môi trường dường như chỉ được xác định trong sh
quy trình con và không được cập nhật trong fish
quy 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'?
eval
ed