เชลล์สคริปต์ใช้ตัวแปรเพื่อเก็บการเปลี่ยนเส้นทางเอาต์พุต


0

ฉันมีสคริปต์ 'ง่าย' ที่รันคำสั่งไม่กี่ปกติฉันแค่ต้องการเห็น echo สองสามแจ้งให้ฉันรู้ว่ามันขึ้นอยู่กับ แต่บางครั้งฉันต้องการเอาต์พุต verbose ซึ่งแสดงผลลัพธ์ของคำสั่งที่ถูกเรียกใช้

ตัวอย่างการใช้งานปกติ

echo "Simple message"
wget 'http://example.com' > /dev/null

ตัวเลือกอย่างละเอียด

echo "Simple message"
wget 'http://example.com'

ฉันคิดว่าการใช้ตัวแปรเพื่อเก็บการเปลี่ยนเส้นทางผลลัพธ์

output=""
if [ -z "$1" ]
  then
    output="> /dev/null"
fi
echo "Simple message"
wget 'http://example.com' $output

ปัญหามันดูเหมือนจะไม่ทำงานดังนั้นฉันจึงเพิ่ม -x ลงใน shebang และผลลัพธ์แสดงให้ฉันเห็น

wget 'http://example.com' '>' /dev/null

ฉันจะหยุดไม่ให้>อ้างคำพูดเดียวได้อย่างไร

สคริปต์ต้นฉบับมีอยู่มากกว่าเรื่องง่าย ๆ นี่เป็นเพียงตัวอย่างสั้น ๆ

คำตอบ:


0

การเปลี่ยนเส้นทาง wget to stdout ช่วยให้คุณเปลี่ยนสคริปต์ของคุณเป็นดังนี้:

#!/bin/bash
output="/dev/stdout"
if [ -z "$1" ]; then
output="/dev/null"
fi
echo "simple message"
wget -qO- 'http://example.com' > "$output"

วิธีนี้เมื่อใดก็ตามที่พารามิเตอร์แรกของคุณว่างเปล่ามันจะเปลี่ยนเส้นทางไปยัง / dev / null เสมอมิฉะนั้นส่งออกไปยัง stdout

หากคุณไม่ต้องการให้มันส่งออกไปยัง stdout ฉันขอแนะนำให้สร้างไฟล์ (ซึ่งจะเหมือนกันเสมอ) แล้วอ่านจากไฟล์หลังจาก wget


เมื่อ $ output ว่างเปล่าคำสั่งนี้จะเป็น ' example.com '> "" การเปลี่ยนเส้นทางทำงานที่นี่ได้อย่างไรมันแค่ใช้ stdout?
Simon Tiplady

ขออภัยฉันไม่ได้อธิบายทั้งหมด ฉันได้อัปเดตคำตอบแล้ว
Robbie

ขอบคุณ @robbie ที่ดูดีจะทดสอบในภายหลัง
Simon Tiplady
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.