Tôi có hai tập lệnh chạy độc lập. đầu tiên cho phép nói rằng tập lệnh A tính toán một số giá trị. Và tôi muốn lặp lại các giá trị này từ kịch bản khác được gọi là B. Các tập lệnh này sẽ không gọi cho nhau. Tôi đã sử dụng từ khóa xuất nhưng không hoạt động. Tôi có thể làm cái này như thế nào?Xuất các biến giữa tập lệnh shell
Trả lời
Nếu tôi hiểu các yêu cầu sau đó có thể không phải cả hai kịch bản được chỉ đơn giản là thực hiện trong cùng một vỏ tiểu, một cách độc lập nhưng mà không gọi nhau hoặc không có bất kỳ nhu cầu của một tập tin bên ngoài hoặc ống như thế này:
Hãy nói rằng đây là script1.sh bạn
#!/bin/bash
# script1.sh: do something and finally
export x=19
Và đây chúng tôi script2 của bạn.sh
#!/bin/bash
# script2.sh: read value of $x here
echo "x="${x}
Chỉ cần gọi cho họ trong cùng một tiểu vỏ như
(. ./script1.sh && ./script2.sh)
OUTPUT này:
x=19
Bạn không thể đọc tệp thứ ba, giả sử settings.sh với các biến được xuất phổ biến?
# common.sh
export MY_PATH=/home/foo/bar/
export VERSION=42.2a
và trong cả A và B source common.sh
để tải các giá trị đó.
Lưu ý rằng việc xuất có thể không được yêu cầu trong trường hợp đó.
Tôi không cần tệp thứ ba thực sự. – thetux4
Bạn có thể lặp lại các giá trị cho tệp, sau đó tập lệnh khác có thể đọc chúng. Nếu bạn muốn sử dụng nó như là một tham số cho một cái gì đó, sử dụng aposthrophe ngược lại:
echo `cat storedvalue`
Hãy cẩn thận, nếu hai kịch bản đang chạy cùng một lúc, các vấn đề có thể xảy ra đồng thời, có thể gây hiếm khi xuất hiện, mystic- tìm lỗi.
Vậy làm cách nào tôi có thể chuyển giá trị trả về của tập lệnh A đến tập lệnh B? – thetux4
mkfifo /tmp/channel
process_a.sh > /tmp/channel&
process_b.sh < /tmp/channel&
wait
Tất nhiên bạn cũng có thể chỉ đọc một dòng khi bạn muốn.
Trong bash có coprocs, cũng có thể là những gì bạn muốn. Ví dụ ngẫu nhiên từ this page
# let the output of the coprocess go to stdout
{ coproc mycoproc { awk '{print "foo" $0;fflush()}' ;} >&3 ;} 3>&1
echo bar >&${mycoproc[1]}
foobar
ksh có một tính năng tương tự, rõ ràng
giao tiếp giữa các quy trình riêng biệt được thực hiện dễ dàng nhất với các tệp và một đường ống được đặt tên cung cấp giao diện giống như tệp: 'A 'FIFO' là loại tệp đặc biệt cho phép các quy trình độc lập giao tiếp.’ –
coproc rất thú vị. tôi sẽ kiểm tra. – thetux4
suy nghĩ của mỗi kịch bản như một chức năng: chức năng Một tính toán một số giá trị và trả về nó. Nó không biết ai sẽ gọi nó. Hàm B lấy giá trị và lặp lại nó. Nó không quan tâm ai tạo ra giá trị đó. Vì vậy, kịch bản A là:
#!/bin/sh
# a.sh: Calculate something and return the result
echo 19
và kịch bản B là:
#!/bin/sh
# b.sh: Consume the calculated result, which passed in as $1
echo The result is $1
Làm cho họ thực thi:
chmod +x [ab].sh
Bây giờ, chúng ta có thể dán chúng lại với nhau trên dòng lệnh:
$ b.sh $(a.sh)
The result is 19
Ngữ nghĩa, b.sh di d không gọi a.sh. Bạn gọi a.sh và chuyển kết quả của nó tới b.sh.
Trên thực tế tất cả các nhu cầu của bạn là source
bạn có thể bỏ tiền tố export
.
use-case của tôi là một môi trường cài đặt cụ thể tập tin, ví dụ:
Trong main_script.sh
THIS_DIR=`dirname $0`
source $THIS_DIR/config_vars.sh
# other commands
Trong config_vars.sh
- 1. biến môi trường shell xuất trước khi chạy lệnh từ tập lệnh PHP CLI
- 2. Xuất biến môi trường sang Makefile shell
- 3. cách bao gồm tệp chứa biến trong tập lệnh shell
- 4. nhạc có tập lệnh shell
- 5. Truy xuất trạng thái thoát từ tập lệnh php bên trong tập lệnh shell
- 6. Thay thế chuỗi trong tập lệnh shell bằng biến số
- 7. Jenkins: đặt biến env từ tập lệnh shell
- 8. Cách tìm chuỗi con trong biến tập lệnh bash shell
- 9. Biến tập lệnh shell không trống (tùy chọn -z)
- 10. tự xóa tập lệnh shell
- 11. Kiểm tra tập lệnh Shell
- 12. đối số truyền giữa các tập lệnh shell nhưng vẫn giữ lại các dấu ngoặc đơn
- 13. Đầu ra ống từ lệnh shell đến tập lệnh python
- 14. c makefile với các lệnh shell và các biến
- 15. Gọi hàm Python từ tập lệnh shell
- 16. Nhập từ trong tập lệnh shell
- 17. Xuất biến từ PHP sang shell
- 18. Chạy các lệnh shell không có cửa sổ shell
- 19. Sự khác nhau giữa $ @ và $ * trong các tập lệnh shell là gì?
- 20. Sử dụng các biến trong lệnh shell vim
- 21. Tại sao nên sử dụng $ {@ + "$ @"} trong các tập lệnh shell?
- 22. shell start/stop cho tập lệnh python
- 23. Chạy tập lệnh bash shell trong java
- 24. Telnet bên trong tập lệnh shell
- 25. Tập lệnh shell để gửi email
- 26. chuỗi ký tự trong tập lệnh shell
- 27. In đẹp cho tập lệnh shell
- 28. Làm cách nào để chuyển hướng stdin từ tập lệnh shell sang lệnh trong tập lệnh shell?
- 29. Kiểm tra đầu ra của lệnh trong tập lệnh shell
- 30. lưu và khôi phục các biến shell
Sẽ không '. script' làm các trick? (xem http://www.linuxquestions.org/questions/linux-newbie-8/how-to-export-environment-variable-from-a-bash-script-344057/) – mlvljr
@mlvljr Bạn nên làm cho câu trả lời này bởi vì đó là những gì tôi cần. Cảm ơn. – Rebs
@AdamGriffiths Vâng, tôi đang cố gắng tránh cuộc đua điểm danh tiếng ở đây;) – mlvljr