รหัสของฉันเพื่อสร้างสคริปต์ที่ปฏิบัติการได้
touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh
รหัสของฉันเพื่อสร้างสคริปต์ที่ปฏิบัติการได้
touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh
คำตอบ:
คุณสามารถออกจากทั้งคำสั่งและไม่มีความจำเป็นต้องใช้touch sudoหากต้องการย่อบรรทัดคำสั่งให้สั้นลงคุณสามารถใช้bashการขยายประวัติเพื่อบันทึกชื่อไฟล์ในครั้งที่สองและเว้นช่องว่างที่ไม่จำเป็น:
echo "echo 'Hello World'" >script.sh&&chmod +x !#:3
ขยายประวัติศาสตร์แทนที่ด้วยคำที่สี่จากบรรทัดคำสั่งในปัจจุบันซึ่งในกรณีของคุณเป็นชื่อไฟล์!#:3 script.shแน่นอนว่าต้องมีการปรับเปลี่ยนในกรณีที่คุณแก้ไขคำสั่งแรกเช่น:
>script.sh echo "echo 'Hello World'"&&chmod +x !#:1
โปรดทราบว่าสคริปต์ที่ถูกต้องความต้องการshebang :
>script.sh echo -e "#!/bin/bash\necho 'Hello World'"&&chmod +x !#:1
หากคุณต้องการคำสั่งกลุ่มคำสั่งนี้บ่อยขึ้นฉันขอแนะนำให้กำหนดฟังก์ชั่นด้วยวิธีนี้คุณเพียงแค่ต้องพิมพ์ชื่อฟังก์ชั่น วิธีที่ปรับเปลี่ยนได้ในทำนองเดียวกัน - ยาวกว่า - คือการใช้ตัวแปรที่เก็บชื่อไฟล์:
f=script.sh;>$f echo "echo 'Hello World'"&&chmod +x $f
installคำสั่ง (ส่วนหนึ่งของ GNU coreutils พร้อมกับcp, mv, rmฯลฯ ) สามารถคัดลอกไฟล์ในขณะที่ยังมีการตั้งค่าความเป็นเจ้าของและการอนุญาตและการสร้างไดเรกทอรีผู้ปกครองได้ตามความจำเป็น โดยค่าเริ่มต้นมันจะทำให้ไฟล์ใหม่ที่ปฏิบัติการได้ ไม่เข้าใจ ' -' แต่/dev/stdinสามารถใช้แทน:
install /dev/stdin script.sh <<< "echo Hello World"
ด้านบนใช้สตริง ' here here ' เพื่อจัดเตรียมข้อความบน stdin ซึ่งสั้นกว่าการไพพ์เล็กน้อยข้อโต้แย้งที่echoไม่จำเป็นต้องมีการอ้างอิงถ้าไม่มีอักขระที่มีความหมายพิเศษ
install <(echo echo Hello World) script.sh
ฉันชอบที่จะใช้catสำหรับงานเช่นนี้:
cat > script.sh && chmod +x script.sh
#!/bin/sh
echo 'Hello World'Enter
Ctrl+D
sudoน้อยที่สุด การติดนิสัยการขว้างปาไปรอบ ๆ อาจเป็นอันตรายได้ ในกรณีนี้คุณเป็นเจ้าของสคริปต์ที่คุณสร้างขึ้นเพื่อให้คุณสามารถทำสิ่งที่คุณพอใจได้ด้วยการอนุญาตไม่จำเป็นต้องใช้ sudo