นามแฝงเทียบกับการส่งออกสำหรับคำสั่งง่ายๆ


33

สำหรับคำสั่งง่ายๆเช่นlessจะดีกว่าไหมถ้าจะสร้าง alias หรือส่งออกตัวเลือก? มีประโยชน์อย่างใดอย่างหนึ่งมากกว่าอีก?

ตัวอย่างเช่นหากฉันต้องการlessใช้-Rตัวเลือกเพื่อแสดงอักขระดิบเสมอโซลูชันทั้งสองนี้ทำงาน:

  1. export LESS='-R'
  2. alias less='less -R'

สำหรับกรณีง่าย ๆ แบบนี้มีประโยชน์อย่างใดอย่างหนึ่งต่ออีกหรือไม่ สถานการณ์ใดที่หนึ่งจะทำให้เกิดปัญหาและอื่น ๆ จะไม่?

ผมเคยอ่านผ่านหลายinfoและmanหน้าเช่นเดียวกับ Googling มัน แต่ฉันยังคงติดอยู่กับเรื่องนี้


1
ไม่มันลงมาตามความชอบส่วนตัว ฉันโหวตให้ปิดตัวลงเพราะดูเหมือนว่ามีความคิดเห็นมากกว่า
slm

อีกสามโซลูชั่น: สร้างฟังก์ชั่นเชลล์ (ใช้งานได้เฉพาะในเชลล์ แต่ไม่จำเป็นต้องเป็นแบบโต้ตอบ); สร้างสคริปต์ใน ~ / bin หรือที่ใดก็ได้ (มีค่าใช้จ่ายในการเริ่มต้นเชลล์ แต่ทำงานได้ทันทีในการใช้งานเชลล์และจากโปรแกรมอื่น ๆ และเป็นแบบถาวร); ไฟล์โปรแกรมเฉพาะการตั้งค่า (สำหรับlessคุณสามารถทำมันใช้lesskey)
deltab

3
@slm มันไม่ได้อิงตามความคิดเห็นหรืออย่างน้อยก็ไม่ได้หมายความว่าเป็น หนึ่งอาจต้องการค่าใช้จ่ายมากขึ้นและการใช้ทรัพยากรโดยไม่จำเป็นโดยเฉพาะอย่างยิ่งในสถานการณ์ที่ซับซ้อนมากขึ้น หนึ่งอาจถูกต้องตามอัตภาพมากขึ้นในโลก * ระวังหรืออาจจะมีมาตรฐานอย่างเป็นทางการที่ไหนสักแห่ง โปรแกรมเมอร์มักหงุดหงิดกับ "รหัสเลอะเทอะ" ตลอดเวลาแม้ในทุกจุดประสงค์และจุดประสงค์ก็บรรลุเป้าหมายเดียวกัน
skittleys

คำตอบ:


30

ข้อแตกต่างระหว่างสองอย่างคือนามแฝงเป็นเพียงคุณลักษณะของเชลล์ ตัวแปรสภาพแวดล้อมได้รับการสืบทอดโดยกระบวนการย่อยทั้งหมด (เว้นแต่จะล้างออกโดยเจตนา)

ตัวแปรสภาพแวดล้อมจะมีโอกาสมากขึ้นในการทำงานแม้ว่าlessจะเปิดตัวทางอ้อมเช่นผ่านเปลือกอื่น (เช่นtcsh) man, vim, psqlฯลฯ


3
โดยเฉพาะอย่างยิ่งนามแฝงจะทำงานในเชลล์แบบโต้ตอบเท่านั้น: คุณไม่สามารถใช้มันในเชลล์สคริปต์ซึ่งบางครั้งคุณอาจต้องการ bash -c 'alias ll="ls -l"; ll'จะไม่ใช้นามแฝง
deltab

อาฉันไม่รู้เรื่องนั้นเลย! ดังนั้นถ้าฉันมีexport LESS='-R'ใน. zshrc ของฉันให้เปิดเซสชัน zsh แล้วเปลี่ยนเป็นทุบตีในเซสชันเดียวกันนั้น (โดยไม่มีการส่งออกเป็น. bashrc) ตัวแปรสภาพแวดล้อมจะยังคงถูกตั้งค่าหรือไม่ ฉันจะคิดว่าทั้งคู่จะสูญเสีย ....
skittleys

@deltab อ่าใช่ฉันรู้เกี่ยวกับความแตกต่างนั้นแล้วขอบคุณปัญหาการใช้สีของ grep ขอบคุณสำหรับการชี้ให้เห็น
skittleys

1

มันขึ้นอยู่กับเครื่องมือที่คุณใช้เป็นอย่างมาก จะมีเครื่องมือที่ช่วยให้คุณใช้อย่างใดอย่างหนึ่งอื่น ๆ ที่อนุญาตเพียงอย่างเดียว

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

บรรทัดล่างเป็นแหล่งรวมของการตั้งค่าและการดำเนินการที่ดีที่สุดสำหรับงานจะมีบางครั้งที่การตั้งค่านามแฝงนั้นง่ายกว่าและถาวรกว่าตัวแปรสภาพแวดล้อมและเวลาอื่น ๆ ที่คุณต้องการชุดเครื่องมือที่มีลักษณะเดียวกับที่คุณต้องการ ตัวแปรสภาพแวดล้อมความรัก

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