Showing posts with label command. Show all posts
Showing posts with label command. Show all posts

Thursday, October 8, 2026

[OpenCode] สร้าง Workflow อัตโนมัติใน OpenCode ด้วย Custom Slash Commands

ในการพัฒนาระบบด้วย OpenCode หลายคนอาจเกิดข้อสงสัยว่า โครงสร้างของ .opencode/commands/ มีไว้ทำอะไร และความแตกต่างระหว่าง Instruction กับ Custom Command คืออะไร ในเมื่อทั้งคู่ต่างก็ใช้ควบคุม AI ได้เหมือนกัน บทความนี้จะพาไปเจาะลึกบทบาท ศูนย์รวมคำสั่งลัด และแนวทางการนำไปประยุกต์ใช้พัฒนาซอฟต์แวร์จริง

Tuesday, February 9, 2021

[Bash Script] วิธีการรันคำสั่งที่เก็บอยู่ในตัวแปร
[Bash Script] How to Run Command that Store in Variable

จากโพสต์ [Bash Script] วิธีการประกาศและใช้ตัวแปรใน Bash Script ที่เราสามารถเก็บค่าผลลัพธ์จากการรันคำสั่งอื่นๆใส่ในตัวแปรได้

สมมติว่า เรามีตัวแปร ชื่อ command ที่เก็บค่าดังนี้

command=$(which echo)

ในที่นี้ command จะมีค่าเป็น /bin/echo

ถ้าหากเราต้องการนำค่าของ command ไปเป็นคำสั่งในการรันต่อ เราจะใช้คำสั่งดังนี้

$command "echo_string"

เราจะเห็นได้ว่า command จะมี $ นำหน้า เพื่อแทนที่ตัวแปรนั้นด้วยค่าของมัน แล้วตามด้วย parameter ที่จะส่งเข้าไปยังคำสั่งนั้นๆ ซึ่งบรรทัดข้างบนจะมีค่าเท่ากับ

/bin/echo "echo_string"

Monday, January 6, 2020

[Laravel - Scheduler] ระวัง!!! การไม่กำหนด username ใน Cron Entry สามารถทำให้เกิด "Permission Denied" ได้
[Laravel - Scheduler] Warning!!! Adding Cron Entry without Specify Username May Cause "Permission Denied"

จากตัวอย่างใน Starting The Scheduler จะกำหนดให้ใส่ cron entry ดังนี้
 
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
ถ้าหากเราตั้งค่าข้างต้นใน crontab ของ root จะมีผลทำให้ folder ที่ถูกสร้างโดย Laravel command ที่ถูกรัน เป็นสิทธิ์ root ทันที

ผลกระทบ คือ เมื่อ controller พยายามเขียนไฟล์หรือสร้าง folder ภายใน folder ดังกล่าว จะเกิด Permission Denied ขึ้น ซึ่งอาจจะทำให้หน้าเว็บไม่สามารถใช้งานได้เลย

วิธีการป้องกัน คือ ให้ใส่ cron entry โดยกำหนด username ที่รันเป็น user ที่ใช้รัน web server ดังนี้
 
* * * * * username cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
โดยปกติแล้ว username ที่รัน PHPFPM จะเป็น www-data ดังนั้น cron entry จะเป็นดังนี้
 
* * * * * www-data cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

หมายเหตุ กรณีที่สร้าง folder ด้วยสิทธิ์ root ไปแล้ว ให้แก้ไขโดยใช้คำสั่งดังนี้
 
chown username folder_name
เช่น
 
chown www-data storages

Monday, June 24, 2019

[Bash Script] วิธีการหาส่วนของข้อความที่อยู่ภายในไฟล์ข้อความ โดยใช้ Regular Expression
[Bash Script] How to Find Substring within Text File by Using Regular Expression

คุณสามารถใช้คำสั่ง grep ตามด้านล่างนี้
grep -o 'Regex pattern' filename
ตัวอย่างเช่น
grep -o 'main.[0-9a-z]*.js' public/index.html
ในกรณีนี้ index.html เป็นไฟล์ที่ถูกสร้างโดย AngularJS และมีชื่อไฟล์ main.{hash}.js อยู่ภายในไฟล์

เราไม่สามารถรู้ค่า hash ของชื่อไฟล์นี้ได้ แต่เรารู้รูปแบบข้อความของชื่อไฟล์นี้

ดังนั้นเราสามารถใช้ Regular Expression ในการหาชื่อไฟล์นี้จาก index.js ได้

Tuesday, February 5, 2019

[Laravel - Command] วิธีการเรียกใช้ command ที่ถูกต้อง จากอีก command นึงใน Laravel
[Laravel - Command] How to Call Laravel Command from Other Commands

บางครั้งเราต้องการสร้าง command เพื่อเรียกใช้ชุด command ที่ได้สร้างไว้ก่อนหน้าแล้ว

สมมติว่า มี 2 commands คือ command A และ B แล้วเราสร้าง command C มาอีกตัว เพื่อเรียกใช้ 2 commands นี้

ถ้าหากเป็นการเรียกรัน command จาก controller ปกติ ก็จะใช้คำสั่งดังนี้
Artisan::call('A');
Artisan::call('ฺB');

แต่สำหรับการเรียกรัน command จากอีก command นึง ห้ามใช้ Artisan::call โดยเด็ดขาด เนื่องจากถ้าหากเกิด exception ขึ้น มันจะไม่ throw exception ออกมายัง command C ทำให้ command C สามารถรันต่อจนเสร็จได้ ถึงแม้จะเกิด exception ใน command A หรือ B ซึ่งเราจะไม่สามารถรู้ได้เลยว่า มันทำงานเสร็จแล้วจริงๆหรือมันเกิด exception ขึ้น ถ้าเราไม่ดูจาก error logs

ในความเป็นจริงแล้ว เราควรจะรู้ว่า command ใดเกิด exception ขึ้น และไม่มีความจำเป็นที่ต้องรัน command อื่นๆต่อไป ในกรณีที่ exception ได้เกิดขึ้นแล้ว ดังนั้นให้ใช้ $this->call แทนดังนี้
$this->call('A');
$this->call('ฺB');

อ่านเพิ่มเติม: https://laravel.com/docs/5.7/artisan#calling-commands-from-other-commands