Về cơ bản, bạn có hai tùy chọn:
- Biến biến thành một biến môi trường (
export TESTVARIABLE
) trước khi thực hiện tập lệnh thứ 2.
- Nguồn kịch bản thứ 2, nghĩa là
. test2.sh
nó sẽ chạy trong cùng một trình bao. Điều này sẽ cho phép bạn chia sẻ các biến phức tạp hơn như mảng một cách dễ dàng, nhưng cũng có nghĩa là tập lệnh khác có thể sửa đổi các biến trong vỏ nguồn.
CẬP NHẬT:
Để sử dụng export
để đặt biến môi trường, bạn có thể sử dụng biến hiện có:
A=10
# ...
export A
Điều này nên làm việc trong cả hai bash
và sh
. bash
cũng cho phép nó được kết hợp như vậy:
export A=10
Điều này cũng hoạt động trong của tôi sh
(mà xảy ra bash
, bạn có thể sử dụng echo $SHELL
để kiểm tra). Nhưng tôi không tin rằng điều đó đảm bảo sẽ hoạt động sh
tốt, vì vậy tốt nhất là chơi an toàn và tách chúng ra.
Bất kỳ biến nào bạn xuất theo cách này sẽ được hiển thị trong các tập lệnh bạn thực thi, ví dụ:
tro:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Sau đó:
$ ./a.sh
The message is: hello
Thực tế là cả hai kịch bản shell cũng chỉ là ngẫu nhiên. Các biến môi trường có thể được truyền cho bất kỳ quá trình nào bạn thực hiện, ví dụ nếu chúng ta sử dụng python thay vào đó, nó có thể trông như sau:
tro:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Tìm nguồn cung ứng:
Thay vào đó chúng ta có thể nguồn như thế này:
tro:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Sau đó:
$ ./a.sh
The message is: hello
Điều này ít nhiều "nhập khẩu" nội dung của b.sh
trực tiếp và thực hiện nó trong cùng một vỏ . Lưu ý rằng chúng tôi đã không phải xuất biến để truy cập nó. Điều này ngầm chia sẻ tất cả các biến bạn có, cũng như cho phép tập lệnh khác thêm / xóa / sửa đổi các biến trong trình bao. Tất nhiên, trong mô hình này, cả hai tập lệnh của bạn phải cùng ngôn ngữ ( sh
hoặc bash
). Để đưa ra một ví dụ về cách chúng ta có thể truyền tin nhắn qua lại:
tro:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Sau đó:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Điều này hoạt động tốt như nhau trong bash
. Nó cũng giúp bạn dễ dàng chia sẻ dữ liệu phức tạp hơn mà bạn không thể biểu thị dưới dạng biến môi trường (ít nhất là không có phần nặng nề của bạn), như mảng hoặc mảng kết hợp.