
กฎที่ไม่ได้กล่าวไว้ในแวดวง Linux มานานแล้วคือ PowerShell เป็นสิ่งที่ Windows และ Bash เป็นเรื่องจริง แม้ว่าฉันจะรักษาตำแหน่งนี้ไว้ในตอนแรก เนื่องจากการทำซ้ำ PowerShell ในช่วงแรกๆ รู้สึกยุ่งยาก ใช้งานได้เฉพาะ Windows เท่านั้น และไม่ได้ถูกนำมาใช้อย่างแพร่หลายตามทางเลือก PowerShell เวอร์ชันนั้นไม่มีมานานหลายปีแล้ว แต่ชุมชน Linux ยังคงมีชื่อเสียงในการละทิ้งเวอร์ชันดังกล่าวแม้ว่าจะมีความคืบหน้าก็ตาม
PowerShell เป็นโอเพ่นซอร์สและข้ามแพลตฟอร์มมานานนับทศวรรษแล้ว มันไม่ใช่เครื่องมือการดูแลระบบเฉพาะ Windows อีกต่อไป เนื่องจากมีบิลด์ดั้งเดิมสำหรับทั้ง Linux และ macOS เช่นกัน ฉันเคยคิดว่ามันเป็นเทอร์มินัลที่ฉันต้องเปิดทุกครั้งที่เขียนสคริปต์สำหรับ PowerShell แต่ฉันจะปิดมันในภายหลังโดยไม่ต้องคำนึงถึงอะไรมาก เมื่อฉันนั่งคุยกับ PowerShell สำหรับโปรเจ็กต์จริง ฉันก็ตระหนักว่านี่ไม่ใช่สิ่งที่ฉันควรละทิ้งอีกต่อไป

ที่เกี่ยวข้อง
5 สคริปต์ PowerShell ที่ผู้ใช้ Windows ทุกคนควรรู้
PowerShell สามารถทำอะไรได้มากมาย
ไปป์ไลน์วัตถุของ PowerShell เปลี่ยนการเขียนสคริปต์
Bash ถูกจำกัดโดยถือว่าทุกอย่างเป็นสตริง
ฉันใช้เวลานานกว่าที่ฉันอยากจะยอมรับในสิ่งที่ทำให้ PowerShell แตกต่างจาก Bash ในที่สุดก็คลิกเมื่อฉันตระหนักถึงความแตกต่างพื้นฐานอย่างหนึ่งระหว่างทั้งสอง: อ็อบเจ็กต์ไปป์ PowerShell และสตริงไปป์ Bash ใน Bash ทุกคำสั่งจะส่งข้อความออกมา จากนั้นคุณก็จะทราบวิธีจัดการข้อความนั้นให้กลายเป็นสิ่งที่มีประโยชน์ ซึ่งมักจะเกี่ยวข้องกับการไพพ์จำนวนมากเพื่อ grep, sed และ awk เพื่อแยกวิเคราะห์เอาต์พุตดิบ แม้สำหรับงานที่ค่อนข้างง่ายก็ตาม เครื่องมือเหล่านั้นทรงพลังและฉันยังคงใช้มันอย่างต่อเนื่อง แต่ฉันต้องยอมรับว่า PowerShell ทำให้หลาย ๆ อย่างง่ายขึ้น
นี่เป็นตัวอย่างสั้นๆ ที่แสดงให้เห็นถึงประเด็นของฉัน ไปป์ไลน์ PowerShell นี้กรองกระบวนการตามการใช้งาน CPU และเลือกชื่อ การใช้งาน CPU ที่เกินกว่า 10% จะปรากฏเป็นเอาต์พุต:
Get-Process | Where-Object CPU -gt 10 | Select-Object Name
ต่อไปนี้เป็นวิธีเขียนสิ่งที่เทียบเท่าใน Bash:
ps -eo comm,pcpu | awk '$2 > 10 {print $1}'
ความแตกต่างที่เห็นได้ทันทีในการอ่านเพียงอย่างเดียว แต่มันทำงานลึกกว่านั้นอีก เนื่องจาก PowerShell กำลังวางอ็อบเจ็กต์แทนที่จะเป็นเพียงข้อความ ไปยังแต่ละคำสั่งที่ตามมา Bash ใช้ awk เพื่อแยกคอลัมน์ที่เราต้องการและเพื่อให้กระบวนการใช้ CPU มากกว่า 10% นี่เป็นเพียงตัวอย่างพื้นฐาน แต่สคริปต์ Bash และไปป์ไลน์ที่ซับซ้อนกว่านั้นใช้ awk และ sed อย่างเสรี และพวกมันจะเสียหายหากคำสั่งส่งเอาต์พุตในรูปแบบที่เบี่ยงเบนไปจากสิ่งที่พวกเขาคาดหวังเลย
สำหรับการเขียนเรียงความสั้นๆ ดังตัวอย่างข้างต้น ความแตกต่างไม่สำคัญกับงานในแต่ละวันมากนัก ผลตอบแทนที่แท้จริงคือสคริปต์ที่ยาวกว่าซึ่งมีตรรกะที่แท้จริง เช่น การแยกย่อยแบบมีเงื่อนไข การจัดการข้อผิดพลาด และการแปลงข้อมูล นั่นคือสิ่งที่โมเดลวัตถุมีความเป็นเลิศ สคริปต์ PowerShell ส่วนใหญ่ของฉันไม่เพียงแต่สั้นกว่าสคริปต์ Bash ที่เทียบเท่ากันมากเท่านั้น แต่ยังกลับมากลับมาดูอีกครั้งในอีกไม่กี่เดือนต่อมาได้ง่ายกว่ามากอีกด้วย ด้วยสคริปต์ Bash ที่ฉันไม่ได้สัมผัสมาสักระยะแล้ว ฉันต้องใช้เวลาอย่างน้อยสองสามนาทีเพื่อศึกษาไปป์ไลน์และจำไว้ว่ามันจัดการข้อมูลอย่างไร
Bash ยังคงชนะในเรื่องการพกพา
สำหรับเครื่องของผมเองข้อดีนั้นก็หมดไป

Bash แพร่หลายมาก และจะไม่ไปไหนทั้งนั้น คุณจะพบมันในทุกระบบ Linux ที่คุณใช้ SSH และคอนเทนเนอร์ Docker ทุกตัวจะนำคุณเข้าสู่พรอมต์ Bash ที่คุ้นเคย นอกจากนี้ สคริปต์ที่เขียนด้วย Bash ยังสามารถย้ายไปยังระบบที่คล้าย Unix เกือบทุกระบบ และทำงานได้โดยไม่จำเป็นต้องแก้ไขใดๆ แม้ว่าจะเป็นข้ามแพลตฟอร์ม แต่ PowerShell ก็ไม่สามารถสัมผัสกับความเป็นสากลในระดับนั้นได้ ดังนั้นคุณจึงสามารถคาดหวังได้เฉพาะบนเครื่อง Windows และอุปกรณ์อื่น ๆ ที่คุณควบคุมเท่านั้น
ตอนแรกฉันไม่ชอบรูปแบบการตั้งชื่อคำกริยา-นาม เช่น Get-ChildItem แทนที่จะเป็น ls หรือ Set-Location แทนที่จะเป็น cd มันให้ความรู้สึกที่ละเอียด แต่ฉันได้ย่อมันให้สั้นลงด้วยนามแฝง และตั้งแต่นั้นมาก็รู้สึกซาบซึ้งในความชัดเจนของแต่ละคำสั่ง เนื่องจากแม้แต่ผู้ใช้ที่ไม่คุ้นเคยกับ PowerShell ก็สามารถรับความหมายของ cmdlet เกือบทุกชนิดได้อย่างรวดเร็ว
สมัครรับจดหมายข่าวสำหรับ PowerShell และข้อมูลเชิงลึกด้านสคริปต์
รับจดหมายข่าวเพื่อการรายงานข่าวเชิงลึกของ PowerShell, Bash และเครื่องมือการเขียนสคริปต์ที่เกี่ยวข้อง ความครอบคลุมประกอบด้วยคำอธิบายออบเจ็กต์-ไปป์ไลน์ ข้อควรพิจารณาข้ามแพลตฟอร์ม การเปรียบเทียบคำสั่ง และตัวอย่างที่เป็นรูปธรรมที่ให้ความกระจ่างถึงการแลกเปลี่ยนในโลกแห่งความเป็นจริง
รับการอัปเดต
การสมัครแสดงว่าคุณตกลงที่จะรับจดหมายข่าวและอีเมลทางการตลาด และยอมรับข้อกำหนดการใช้งานและนโยบายความเป็นส่วนตัวของเรา คุณสามารถยกเลิกการสมัครได้ตลอดเวลา
เนื่องจากสคริปต์ส่วนใหญ่ที่ฉันเขียนมีไว้สำหรับระบบของฉันเอง ความสะดวกในการพกพาของ Bash จึงไม่สำคัญมากนักในโฮมแล็บ เซิร์ฟเวอร์ส่วนตัวเสมือน หรือเวิร์กสเตชันรายวัน PowerShell เวอร์ชันข้ามแพลตฟอร์มทำงานเหมือนกันในแต่ละระบบที่ฉันใช้งาน ดังนั้นฉันจึงมักจะเข้าถึงเมื่อใดก็ตามที่ไปป์ไลน์มีสคริปต์ Bash ที่ซับซ้อนอย่างท่วมท้น
สำหรับระบบ Windows ของฉัน การใช้ WSL หมายความว่าฉันสามารถเขียนสคริปต์ PowerShell หนึ่งสคริปต์ที่สัมผัสเส้นทางไฟล์ Windows API และ Linux จากเซสชันเดียวกัน โดยไม่จำเป็นต้องสลับเครื่องมือ นั่นคือสิ่งที่ Bash ทำไม่ได้ นอกจากนี้ยังไม่มีการเทียบเท่า Bash ดั้งเดิมสำหรับสิ่งต่าง ๆ เช่นการจัดการข้อผิดพลาด (นอกเหนือจากรหัสทางออกและ set-e ซึ่งไม่น่าเชื่อถืออย่างฉาวโฉ่ในไปป์ไลน์) และการจัดการข้อมูลรับรอง (SecureString) สิ่งดีๆ เหล่านี้เริ่มรู้สึกว่าจำเป็นในสคริปต์ที่ยาวและซับซ้อนมากขึ้น ซึ่งทำให้ฉันมีเหตุผลอีกประการหนึ่งที่จะเข้าถึง PowerShell
ถึงเวลาปรับเทียบชื่อเสียงของ PowerShell แล้ว
ไม่ต้องสงสัยเลยว่า PowerShell จะไม่มาแทนที่ Bash และก็ไม่จำเป็นด้วย แต่มันได้รับความนิยมในชุดเครื่องมือของใครก็ตามที่ทำงานเขียนสคริปต์อย่างจริงจัง โดยเฉพาะอย่างยิ่งใน Windows หรือสภาพแวดล้อมแบบไฮบริด ออบเจ็กต์ไปป์ไลน์เพียงอย่างเดียวก็คุ้มค่ากับการเรียนรู้ และการวิพากษ์วิจารณ์เก่า ๆ ส่วนใหญ่ไม่เกี่ยวข้องกับบิลด์ดั้งเดิมที่มีอยู่ในระบบปฏิบัติการอื่นอีกต่อไป ผู้ใช้ Linux ส่วนใหญ่จะแปลกใจกับสิ่งที่ PowerShell กลายเป็น นั่นคือถ้าพวกเขาเคยใส่ใจที่จะดูจริงๆ
*️⃣ ลิงค์ที่มา:
PowerShell เป็นสิ่งที่ Windows สคริปต์เขียนขึ้นสำหรับ PowerShell 5 สคริปต์ PowerShell ที่ผู้ใช้ Windows ทุกคนควรรู้ สิ่งที่ทำให้ PowerShell แตกต่างจาก Bash ผลตอบแทนที่แท้จริงอยู่ที่สคริปต์ที่ยาวกว่า , , , , ข้อกำหนดการใช้งาน , นโยบายความเป็นส่วนตัว สคริปต์ส่วนใหญ่ที่ฉันเขียน ใช้ WSL แทนที่ Bash