คำนำหน้าด้วย shellscript ตรวจสอบ
เชลล์สคริปต์ ตรวจสอบ
ที่สามารถใช้นำหน้าบรรทัดคำสั่งใด ๆ อาจมีลักษณะดังนี้
#!/bin/bash
ถ้า [ "$1" == "--debug" ]
แล้ว
แก้จุดบกพร่อง = จริง
กะ
อื่น
ดีบัก = เท็จ
ไฟ
"$@" & pid=$!
นอน 0.1 # ครั้ง (s) จนกว่าจะฆ่า
ฆ่า $pid 2> /dev/null
ความละเอียด = "$?"
ถ้า $debug
แล้ว
ถ้า [ $res -eq 0 ]
แล้ว
echo "หมดเวลา: $@"
อื่น
echo "เสร็จสิ้นอย่างงดงาม: $@"
ไฟ
ไฟ
ตัวอย่างที่ 1
$ ./check --debug bash -c "ในขณะที่จริง;ทำวันที่ '+%s.%N';sleep 0.01;done"
1634944386.589977656
1634944386.603126888
1634944386.616089924
1634944386.629058026
1634944386.642334480
1634944386.655644267
1634944386.668289318
1634944386.681058710
ถูกฆ่าเมื่อหมดเวลา: bash -c ในขณะที่ true;do date '+%s.%N';sleep 0.01;done
ตัวอย่างที่ 2
$ ./check --debug lsblk
ชื่อ MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238,5G 0 ดิสก์
ââsda1 8:1 0 500M 0 ส่วน
ââsda2 8:2 0 139,4G 0 ส่วน
ââsda3 8:3 0 1000M 0 ส่วน
ââsda4 8:4 0 1K 0 ส่วน
ââsda5 8:5 0 89,7G 0 ส่วน /
ââsda6 8:6 0 8G 0 ส่วน [สลับ]
sdb 8:16 0 3,7T 0 ดิสก์
ââsdb1 8:17 0 510M 0 ส่วน
ââsdb2 8:18 0 30G 0 ส่วน
ââsdb5 8:21 0 1M 0 ส่วน
ââsdb6 8:22 0 100G 0 ส่วน
ââsdb7 8:23 0 3,5T 0 ส่วน /media/multimed-2
ââsdb8 8:24 0 5G 0 ส่วน
sr0 11:0 1 1024M 0 รอม
nvme0n1 259:0 0 232,9G 0 ดิสก์
âânvme0n1p1 259:1 0 232,9G 0 ส่วน
âânvme0n1p2 259:2 0 1M 0 ส่วน
จบอย่างงดงาม: lsblk
เชลล์แบบกำหนดเองดั้งเดิม ป.ล
อีกทางเลือกหนึ่งคือเชลล์โหมดบ้านดั้งเดิม ป.ล
สามารถใช้เพื่อการนี้ได้เช่นกัน
ข้อดี: คุณสามารถเรียกใช้คำสั่งได้โดยตรงโดยไม่ต้องมีคำนำหน้าเพิ่มเติม
ข้อเสีย: คุณสามารถแก้ไขบรรทัดคำสั่งได้ แต่ไม่มีประวัติและคุณไม่สามารถเข้าถึงประวัติของเชลล์มาตรฐานได้ ตัวอย่างเช่น ทุบตี
, zsh,
tcsh`). คุณสมบัติอื่น ๆ ของเชลล์มาตรฐานยังขาดหายไปเช่นกัน
bash shellscript ป.ล
และสคริปต์ python3 เข็มหมุด
ควรทำให้สามารถเรียกใช้งานได้และคัดลอก ย้าย หรือเชื่อมโยงไปยังไดเร็กทอรีใน เส้นทาง
, ตัวอย่างเช่น /usr/local/bin
,
เริ่ม ป.ล
เรียกใช้คำสั่งและออกจากมันด้วย ทางออก
. อินพุตถูกจัดการโดย เข็มหมุด
ที่ใช้ อ่านไลน์
เพื่อให้สามารถแก้ไขบรรทัดคำสั่งได้ (ขั้นสูงกว่าคำสั่งในตัว อ่าน
ของ ทุบตี
).
ป.ล
,
#!/bin/bash
tmpf=$(mktemp)
ขมิ้น = "$ (pwd)"
cmd=
ในขณะที่จริง
ทำ
# อ่าน -p "psh:$curdir> " cmd 2>&1
# echo "$cmd" > "$tmpf"
ปักหมุด "$curdir" "$tmpf"
#แมว "$tmpf"
cmd=$(แมว "$tmpf")
ถ้า [ "$cmd" != "ออก" ]
แล้ว
ถ้า [ "${cmd:0:3}" == "cd " ]
แล้ว
ที่มา "$tmpf"
ขมิ้น = "$ (pwd)"
อื่น
แหล่งที่มา "$tmpf" & pid=$!
นอน 0.1 # ครั้ง (s) จนกว่าจะฆ่า
ฆ่า $pid 2> /dev/null
ไฟ
อื่น
หยุดพัก
ไฟ
เสร็จสิ้น 2> /dev/null
rm "$tmpf"
เข็มหมุด
,
#!/usr/bin/python3
จาก sys นำเข้า argv
นำเข้า rlcompleter
นำเข้าอ่านไลน์
readline.parse_and_bind("แท็บ: สมบูรณ์")
พรอมต์ = 'psh:{0} > '.format(argv[1])
f = เปิด (argv [2], 'w')
cmd = อินพุต (พรอมต์)
f.write('{0}\n'.format(cmd)) # เขียนไปยังอาร์กิวเมนต์แรก
ตัวอย่าง:
sudodus@bionic64 /media/multimed-2/test/test0/temp/PeterElbert $ psh
psh:/media/multimed-2/test/test0/temp/PeterElbert > ในขณะที่จริง;ทำวันที่ '+.%N';sleep 0.008;done
.753302869
.763750113
.773720876
.783983502
.794652755
.805570413
.816651252
.827621482
.838553391
.849516607
psh:/media/multimed-2/test/test0/temp/PeterElbert > ls -l
รวม 12
-rwxrwxr-x 1 sudodus sudodus 282 okt 23 01:18 ตรวจสอบ
-rwxrwxr-x 1 sudodus sudodus 255 okt 23 07:18 พิน
-rwxrwxr-x 1 ซูโดดัส ซูโดดัส 438 ตกลง 23 07:51 psh
psh:/media/multimed-2/test/test0/temp/PeterElbert > ซีดี ..
psh:/media/multimed-2/test/test0/temp > ออก
sudodus@bionic64 /media/multimed-2/test/test0/temp/PeterElbert $