PowerShell vs Bash: นักพัฒนาเผยฟีเจอร์ที่ขาดหายไปหลังจากเปลี่ยนกลับไปใช้ Linux

ทีมชุมชน BigGo
PowerShell vs Bash: นักพัฒนาเผยฟีเจอร์ที่ขาดหายไปหลังจากเปลี่ยนกลับไปใช้ Linux

ประสบการณ์ของนักพัฒนาคนหนึ่งที่เปลี่ยนจาก PowerShell กลับไปใช้ shell แบบดั้งเดิมของ Linux ได้จุดประกายการถกเถียงเกี่ยวกับข้อดีข้อเสียระหว่าง shell environment สมัยใหม่กับเครื่องมือ Unix ที่มีมายาวนาน หลังจากใช้ PowerShell อย่างเข้มข้นบน Windows นักพัฒนาคนนี้พบว่าตนเองคิดถึงฟีเจอร์สำคัญหลายอย่างเมื่อกลับไปใช้ bash และ zsh บนระบบ Linux

ประสบการณ์ของนักพัฒนาในการใช้ PowerShell ในเซสชันการดีบักเป็นตัวอย่างของการแลกเปลี่ยนที่ต้องเผชิญเมื่อเปลี่ยนกลับไปใช้ Linux shell แบบดั้งเดิมอย่าง bash และ zsh
ประสบการณ์ของนักพัฒนาในการใช้ PowerShell ในเซสชันการดีบักเป็นตัวอย่างของการแลกเปลี่ยนที่ต้องเผชิญเมื่อเปลี่ยนกลับไปใช้ Linux shell แบบดั้งเดิมอย่าง bash และ zsh

การประมวลผลแบบ Object เทียบกับการจัดการ Text

ความแตกต่างที่สำคัญที่สุดที่ถูกเน้นย้ำคือแนวทางแบบ object-oriented ของ PowerShell เมื่อเปรียบเทียบกับเครื่องมือ Unix แบบดั้งเดิมที่ใช้ text PowerShell จัดการผลลัพธ์ของคำสั่งเป็น structured objects ที่มี named properties ทำให้ไม่จำเป็นต้องใช้เครื่องมือแยกวิเคราะห์ text อย่าง awk, sed และ cut สิ่งนี้ช่วยให้นักพัฒนาสามารถกรองและจัดการข้อมูลโดยใช้ชื่อ property แทนที่จะใช้ regular expressions ที่ซับซ้อนหรือตำแหน่งของคอลัมน์

สมาชิกในชุมชนมีความเห็นแตกแยกเกี่ยวกับแนวทางนี้ บางคนชื่นชมธรรมชาติที่มีโครงสร้างของ objects ในขณะที่คนอื่นๆ ชอบปรัชญา Unix ของเครื่องมือเฉพาะทางที่เก่งในงานเฉพาะด้าน ผู้ดูแลระบบที่มีประสบการณ์คนหนึ่งสังเกตว่าเครื่องมือดั้งเดิมอย่าง tar และ zip จัดการกรณีพิเศษได้มากกว่า cmdlet Extract-Archive ของ PowerShell ซึ่งถูกจำกัดด้วยการใช้งาน .NET library พื้นฐาน

ข้อดีของ Traditional Linux Shell:

  • เครื่องมือเฉพาะทางที่เป็นเลิศในงานเฉพาะด้าน (tar, zip, unzip)
  • จัดการกับกรณีพิเศษในยูทิลิตี้หลักได้ดีกว่า
  • มีอยู่แล้วในระบบ Unix ทั้งหมด
  • ทีมงานมีความรู้และขั้นตอนการทำงานที่ชัดเจนแล้ว
  • กลไกการหยุดทำงานเมื่อเกิดข้อผิดพลาดที่เรียบง่าย (set -e)
  • ไวยากรณ์ที่กระชับกว่า

Tab Completion และเอกสารประกอบในตัว

PowerShell มี tab completion อัตโนมัติและเอกสารช่วยเหลือแบบบูรณาการสำหรับ custom functions โดยไม่ต้องตั้งค่าเพิ่มเติม shell ดั้งเดิมของ Linux ต้องการการตั้งค่า completion scripts ด้วยตนเอง ซึ่งนักพัฒนาหลายคนข้ามไปเนื่องจากความยุ่งยากเพิ่มเติม รูปแบบการตั้งชื่อแบบ verb-noun ที่สม่ำเสมอใน PowerShell ยังช่วยในการค้นหาคำสั่ง ทำให้ง่ายต่อการหาคำสั่งที่เกี่ยวข้องโดยไม่ต้องค้นหาจากแหล่งภายนอก

ข้อดีของ PowerShell ที่กล่าวถึง:

  • เอาต์พุตแบบออบเจ็กต์ที่มีคุณสมบัติที่มีชื่อ
  • การเติมข้อความแบบ tab ในตัวสำหรับฟังก์ชันที่กำหนดเอง
  • เอกสารช่วยเหลือแบบบูรณาการ
  • การตั้งชื่อคำสั่งแบบ verb-noun ที่สม่ำเสมอ
  • การตรวจสอบประเภทและการตรวจสอบความถูกต้องของ pipeline
  • การแปลงออบเจ็กต์ JSON/XML พร้อมการเติมข้อความแบบ tab

ความท้าทายในการรับเอา Cross-Platform

แม้ว่า PowerShell จะใช้ได้บน Linux และ macOS แต่การรับเอาไปใช้ยังคงจำกัดอยู่นอกสภาพแวดล้อม Windows อุปสรรคหลักไม่ใช่ความสามารถทางเทคนิค แต่เป็นเรื่องของพลวัตของทีมและ workflow ที่มีอยู่แล้ว ทีมพัฒนา Linux โดยทั่วไปมีความเชี่ยวชาญลึกซึ้งใน bash scripting และ toolchains ที่มีอยู่แล้ว ทำให้การรับเอา PowerShell มาใช้เป็นการต่อสู้ในทางขึ้นเขา แม้จะมีประโยชน์ที่เป็นไปได้

ฉันรู้ว่า PowerShell เป็น cross-platform แต่ขอโชคดีในการชักจูงทีมที่คุ้นเคยกับ Unix

ทางเลือกอื่น:

  • Nushell: เชลล์สมัยใหม่ที่รวมข้อมูลที่มีโครงสร้างเข้ากับไวยากรณ์ที่กระชับกว่า
  • การผสมผสาน jc + jq: ให้การจัดการแบบออบเจ็กต์ในสภาพแวดล้อม Unix แบบดั้งเดิม
  • Fish shell: ประสบการณ์การใช้งานที่ดีขึ้นด้วยการตั้งค่าเริ่มต้นที่ดีกว่า
  • PowerShell บน Linux: มีความพร้อมใช้งานข้ามแพลตฟอร์ม แต่การยอมรับในทีมงานยังจำกัด

โซลูชันทางเลือกเริ่มปรากฏ

การอภิปรายนี้ได้เน้นย้ำ shell ทางเลือกอย่าง Nushell ซึ่งมีเป้าหมายที่จะรวมแนวทาง structured data ของ PowerShell เข้ากับ syntax ที่ไม่ยาวเยิ่อ นักพัฒนาบางคนยังใช้การผสมผสานของเครื่องมือเช่น jc และ jq เพื่อให้ได้การจัดการแบบ object-like ของผลลัพธ์คำสั่งในสภาพแวดล้อม Unix ดั้งเดิม

การถกเถียงนี้สะท้อนคำถามที่กว้างขึ้นเกี่ยวกับวิวัฒนาการของ shell และว่าปรัชญา Unix ของเครื่องมือที่เรียบง่ายและสามารถประกอบกันได้ยังคงเหมาะสมที่สุดสำหรับ workflow การพัฒนาสมัยใหม่หรือไม่ ในขณะที่ PowerShell เสนอฟีเจอร์ที่น่าสนใจสำหรับสภาพแวดล้อมที่เน้น Windows การรับเอาไปใช้บน Linux ต้องเผชิญกับอุปสรรคทางวัฒนธรรมและการปฏิบัติที่คุณค่าทางเทคนิคเพียงอย่างเดียวไม่สามารถเอาชนะได้

อ้างอิง: I've returned to Linux but I miss PowerShell