ฉันไม่สามารถสะท้อนเสียงของสตริงที่ผสมกันลงในไฟล์


3

บรรทัดนี้ใช้งานได้ตามที่คาดหวังด้วยตัวมันเอง

(echo '@$X!'; sleep 3; echo '@$X!')

และฉันต้องแทรกบรรทัดนี้ในไฟล์โดยใช้คำสั่งต่อไปนี้ แต่มันไม่ทำงาน echoคำสั่ง 'ed จะต้องปฏิบัติการ

echo "(echo '@$X!'; sleep 3; echo '@$X!') | mycmd" >> a

มันกลับข้อผิดพลาดนี้

sh: !': event not found

ฉันเข้าใจว่าการสะท้อนสตริงระหว่างเครื่องหมายคำพูดเดี่ยวยับยั้ง substituion ตัวแปรหรือการหลบหนีของอักขระ แต่ฉันไม่สามารถใช้สิ่งนั้นเพื่อแก้ปัญหานี้!

ฉันต้องทำมันผ่านคำสั่งเพราะฉันจะส่งมันผ่านเครื่องมือเพื่อแก้ไขไฟล์โดยใช้โปรแกรมแก้ไขไม่ได้เป็นตัวเลือกสำหรับฉัน


หมายเหตุ: คุณไม่ได้กำลังทุบตีหรือใช้มันในshโหมด (สามารถมองเห็นได้จากข้อความแสดงข้อผิดพลาด) ฉันไม่ได้รับข้อผิดพลาดจากการทุบตีแม้ว่า$ความต้องการการหลบหนี (และฉันอาจมีการตั้งค่าตัวเลือกที่ไม่ใช่ค่าเริ่มต้น)
Mat

ฉันได้รับข้อผิดพลาดเดียวกันในการทุบตีเช่นกัน
nohillside

@ Muhammad-gelbana จำเป็นต้องเป็น!หรือไม่? แล้วจะเกิดอะไรขึ้นaหลังจากนั้นมันจะถูกเรียกใช้งานเป็นเชลล์สคริปต์หรือไม่?
nohillside

@patrix ใช่แล้ว :) $ตัวละครจะต้องต่อท้ายด้วย ไฟล์ที่ถูกต่อท้ายจะถูกเรียกใช้งานในการเริ่มต้นแต่ละครั้งและเป็นสิ่งสำคัญมากที่จะใช้วิธีนี้
มูฮัมหมัด Gelbana

ฉันแค่กังวลเล็กน้อยว่าเรากำลังแก้ปัญหาที่ผิดที่นี่ ภาพที่คุณต้องการทำให้สำเร็จมากขึ้นคืออะไร (ทำไมคุณต้องสร้างสคริปต์เริ่มต้นโดยทางโปรแกรมในตอนแรก)
nohillside

คำตอบ:


2

ปรับปรุง

ความคิดแรกของฉันผิด การอ้างถึง bang ( !) อย่างชัดเจนดูเหมือนว่าจะทำงาน:

echo "(echo '@$'\!; sleep 3; echo '@$'\!) | mycmd" > a

หากทำงานได้คำสั่งในaจะมี@$!เครื่องหมายคำพูดคู่ซึ่งจะเป็นปัญหา
Mat

หากฉันสลับเครื่องหมายคำพูดเดี่ยวและคู่บรรทัดจะผนวกเข้ากับไฟล์ แต่echoบรรทัด ed จะไม่ทำงาน
มูฮัมหมัด Gelbana

@Thor ฉันขอโทษสำหรับความสับสน แต่ฉันไม่ได้ระบุปัญหาทั้งหมดของฉัน ขึ้นอยู่กับวิธีการแก้ปัญหาและการปรับปรุงเล็กน้อยภายในคำถามของฉัน (คือตัวละครของคุณXคำต่อท้าย$) echo '(echo "@\$X"\!; sleep 3; echo "@\$X"\!) | mycmd' > aนี้ควรจะเป็นคำตอบที่: ขอบคุณ.
มูฮัมหมัด Gelbana
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.