มีวิธีการสร้างสคริปต์และทำให้มันปฏิบัติการในรหัสน้อยกว่านี้หรือไม่?


8

รหัสของฉันเพื่อสร้างสคริปต์ที่ปฏิบัติการได้

touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh

2
@hamfiorin ฉันต้องการเน้นส่วนแรกของคำตอบของหวาน คุณควรพยายามใช้ให้sudoน้อยที่สุด การติดนิสัยการขว้างปาไปรอบ ๆ อาจเป็นอันตรายได้ ในกรณีนี้คุณเป็นเจ้าของสคริปต์ที่คุณสร้างขึ้นเพื่อให้คุณสามารถทำสิ่งที่คุณพอใจได้ด้วยการอนุญาตไม่จำเป็นต้องใช้ sudo
มารี

2
เกี่ยวข้องกับวิธีทั่วไป: เคล็ดลับสำหรับการเล่นกอล์ฟใน Bash
Digital Trauma

คำตอบ:


18

คุณสามารถออกจากทั้งคำสั่งและไม่มีความจำเป็นต้องใช้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

ถ้าชื่อไฟล์ของคุณมีอักขระพิเศษไม่ลืมที่จะพูดได้อย่างถูกต้อง


20

installคำสั่ง (ส่วนหนึ่งของ GNU coreutils พร้อมกับcp, mv, rmฯลฯ ) สามารถคัดลอกไฟล์ในขณะที่ยังมีการตั้งค่าความเป็นเจ้าของและการอนุญาตและการสร้างไดเรกทอรีผู้ปกครองได้ตามความจำเป็น โดยค่าเริ่มต้นมันจะทำให้ไฟล์ใหม่ที่ปฏิบัติการได้ ไม่เข้าใจ ' -' แต่/dev/stdinสามารถใช้แทน:

install /dev/stdin script.sh <<< "echo Hello World"

ด้านบนใช้สตริง ' here here ' เพื่อจัดเตรียมข้อความบน stdin ซึ่งสั้นกว่าการไพพ์เล็กน้อยข้อโต้แย้งที่echoไม่จำเป็นต้องมีการอ้างอิงถ้าไม่มีอักขระที่มีความหมายพิเศษ


โปรดทราบว่า herestring เป็น Bashism - heredoc น่าจะพกพาได้
Steven Penny

3
ความคิดดี. คุณสามารถใช้การทดแทนกระบวนการ :install <(echo echo Hello World) script.sh
บาดเจ็บแบบดิจิทัล

8

ฉันชอบที่จะใช้catสำหรับงานเช่นนี้:

cat > script.sh && chmod +x script.sh
#!/bin/sh
echo 'Hello World'Enter
Ctrl+D

1

คุณสามารถปล่อยให้ chmod ทั้งหมดและใช้ umask แทนเสียงก้อง ควรช่วยคุณสองสามไบต์ Shebang เป็นทางเลือกตราบใดที่คุณใช้คำสั่งที่ทุกเชลล์เข้าใจ (bourne และ C เป็นหลัก)


5
คุณจะทำอย่างนั้นได้อย่างไร
wjandrea

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