คุณมีสองตัวเลือกโดยทั่วไป:
- ทำให้ตัวแปรเป็นตัวแปรสภาพแวดล้อม (
export TESTVARIABLE
) ก่อนดำเนินการสคริปต์ที่ 2
- แหล่งสคริปต์ที่สองคือ
. test2.sh
และมันจะทำงานในเปลือกเดียวกัน สิ่งนี้จะช่วยให้คุณแบ่งปันตัวแปรที่ซับซ้อนมากขึ้นเช่นอาร์เรย์ได้อย่างง่ายดาย แต่ก็หมายความว่าสคริปต์อื่นสามารถแก้ไขตัวแปรในเชลล์ซอร์สได้
UPDATE:
หากต้องการใช้export
เพื่อตั้งค่าตัวแปรสภาพแวดล้อมคุณสามารถใช้ตัวแปรที่มีอยู่:
A=10
# ...
export A
นี้ควรจะทำงานทั้งในและ bash
อนุญาตให้รวมกันได้เช่น:sh
bash
export A=10
นอกจากนี้ยังใช้งานได้ในของฉัน sh
(ซึ่งเกิดขึ้นเป็นbash
คุณสามารถใช้echo $SHELL
ในการตรวจสอบ) แต่ฉันไม่เชื่อว่าจะรับประกันว่าจะทำงานได้ทั้งหมดsh
ดังนั้นควรเล่นให้ปลอดภัยและแยกพวกเขาออก
ตัวแปรที่คุณส่งออกด้วยวิธีนี้จะปรากฏในสคริปต์ที่คุณเรียกใช้ตัวอย่างเช่น:
เถ้า:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
แล้ว:
$ ./a.sh
The message is: hello
ข้อเท็จจริงที่ว่าสิ่งเหล่านี้เป็นเชลล์สคริปต์ทั้งคู่ก็เป็นเรื่องบังเอิญ ตัวแปรสภาพแวดล้อมสามารถส่งผ่านไปยังกระบวนการใด ๆ ที่คุณดำเนินการตัวอย่างเช่นถ้าเราใช้ python แทนมันอาจมีลักษณะดังนี้:
เถ้า:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
จัดหา:
เราสามารถหาแหล่งที่มาเช่นนี้แทน:
เถ้า:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
แล้ว:
$ ./a.sh
The message is: hello
นี้มากหรือน้อย "นำเข้า" เนื้อหาของb.sh
โดยตรงและดำเนินการในเปลือกเดียวกัน โปรดสังเกตว่าเราไม่จำเป็นต้องส่งออกตัวแปรเพื่อเข้าถึง สิ่งนี้จะแชร์ตัวแปรทั้งหมดที่คุณมีรวมถึงอนุญาตให้สคริปต์อื่นเพิ่ม / ลบ / แก้ไขตัวแปรในเชลล์ แน่นอนในรุ่นนี้ทั้งสคริปต์ของคุณควรเป็นภาษาเดียวกัน ( sh
หรือbash
) ในการให้ตัวอย่างว่าเราสามารถส่งข้อความกลับไปกลับมาได้อย่างไร:
เถ้า:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
แล้ว:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
มันใช้งานได้ดีอย่างเท่าเทียมกันbash
ค่ะ นอกจากนี้ยังทำให้ง่ายต่อการแบ่งปันข้อมูลที่ซับซ้อนมากขึ้นซึ่งคุณไม่สามารถแสดงเป็นตัวแปรสภาพแวดล้อมได้ (อย่างน้อยก็ไม่มีการยกของหนัก) เช่นอาร์เรย์หรืออาร์เรย์ที่เชื่อมโยงกัน