ตั้งค่า -T ใน bash - มันทำอะไร?


1

อะไรนะ set -T หมายถึงทุบตี? มันทำอะไร? ฉันเชื่อว่ามันเกี่ยวข้องกับกับดักใน Unix แต่ฉันไม่แน่ใจ

ฉันพบ นี้ :

โครงสร้างหลายอย่างนั้นง่ายขึ้นถ้าเรียกกับกับดัก   ในขณะที่เป็นเด็กเบื้องหน้ายังคงทำงาน คุณจะ   เพียงติดตั้งตัวจัดการกับดักที่ทำ "สิ่ง" เกี่ยวกับปัญหา   และจะถูกเรียกทุกครั้งที่คุณกด SIGINT (หรือ SIGQUIT) เพียงเท่านี้   ตัวจัดการสัญญาณในโปรแกรม C ถูกเรียกใช้โดยไม่ได้ตั้งใจ บางทีฉันก็เหมือนกัน   โปรแกรมเมอร์ C มาก แต่ฉันพบพฤติกรรม sh ล่าช้ามาก   ไม่ใช่งานง่าย

#! /bin/sh

onsig()
{     trap SIGINT     kill -SIGINT $$
}
set -T            # set async execution of traps on FreeBSD
trap onsig SIGINT
./some-blocking-program
set +T            # set traps execution behaviour back to normal

สิ่งนี้ทำให้ตัวจัดการกับดักซับซ้อนขึ้นเล็กน้อย แต่ก็ช่วยให้คุณ   เพื่อเขียนส่วนหลักของเชลล์สคริปต์ของคุณตามปกติโดยไม่ต้องรักษา   โปรดทราบว่าโปรแกรมอาจบล็อกและดำเนินการตามความเหมาะสม   เกี่ยวกับมัน.


บางทีคำถามนี้อาจเป็นที่สนใจของคุณ: stackoverflow.com/questions/6928946/... (เกี่ยวกับ errtrace)
hmontoliu

คำตอบ:


8

จาก help set:

  -T  If set, the DEBUG trap is inherited by shell functions.

ดังนั้นหากคุณใช้ trap เพื่อเรียกใช้ฟังก์ชั่น DEBUG (นั่นคือก่อนที่ทุกคำสั่งในเชลล์สคริปต์) จากนั้นเรียกใช้เชลล์สคริปต์อื่นการดักจะเกิดขึ้นในสคริปต์นั้นเช่นกัน หากไม่มีตัวเลือกนี้กับดักจะไม่มีอยู่ใน subshell และสคริปต์ที่เรียกใช้ในนั้นจะทำงานไม่ถูกแก้ไข


2

นี่คืออะไร man bash พูดว่า (คำใบ้: มันเป็นไฟล์ขนาดใหญ่มากฉันมักจะค้นหา ..lotsofspaces..set )

If  set,  any  traps  on  DEBUG and RETURN are inherited by
shell functions, command substitutions, and  commands  exe-
cuted  in  a  subshell  environment.   The DEBUG and RETURN
traps are normally not inherited in such cases.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.