2008-11-20 36 views

Trả lời

5

Đây là cách duy nhất mà tôi biết để làm những gì bạn muốn:

Trong foo.sh, bạn có:

#!/bin/bash 
echo MYVAR=abc123 

Và khi bạn muốn để có được những giá trị của biến, bạn có để thực hiện các việc sau:

$ eval "$(foo.sh)" # assuming foo.sh is in your $PATH 
$ echo $MYVAR #==> abc123 

Tùy thuộc vào những gì bạn muốn làm và cách bạn muốn, đề xuất của Douglas Leeder về sử dụng nguồn có thể được sử dụng, nhưng sẽ cung cấp toàn bộ tệp, chức năng và tất cả các. Sử dụng eval, chỉ những thứ được lặp lại sẽ được đánh giá.

+0

Tôi chỉ đang cố gắng thực hiện điều đó. Tôi đã có eval và $ (foo) ngoại trừ tôi rời khỏi các dấu ngoặc kép xung quanh đối số để eval. Không làm việc. Cảm ơn bạn đã sửa lỗi. – jmanning2k

13

Không thực sự - khi bạn đang chạy trong một tiến trình con, bạn không thể ảnh hưởng đến cha mẹ của bạn.

Có hai khả năng:

1) Nguồn kịch bản chứ không phải là chạy nó (xem source .):

 
    source {script} 

2) Có kịch bản đầu ra các lệnh xuất khẩu, và eval rằng:

 
    eval `bash {script}` 
OR: 
    eval "$(bash script.sh)" 

EDIT: Đã sửa tùy chọn thứ hai thành eval thay vì nguồn. Opps.

1

Đặt biến trong/etc/profile (tạo tệp nếu cần). Điều đó về cơ bản sẽ làm cho biến có sẵn cho mỗi quá trình bash.

0

Đặt biến trong/etc/profile (tạo tệp nếu cần). Điều đó về cơ bản sẽ làm cho biến có sẵn cho mỗi quá trình bash.

... cho mỗi quy trình bash MỚI ...

Các vấn đề liên quan