ฉันสร้างสคริปต์ตัวห่อแบบพกพาขนาดเล็กที่เรียกว่า "xargsL" รอบ ๆ "xargs" ซึ่งจัดการปัญหาส่วนใหญ่ได้
ตรงกันข้ามกับ xargs, xargsL ยอมรับชื่อพา ธ หนึ่งรายการต่อบรรทัด ชื่อพา ธ อาจมีอักขระใด ๆ ยกเว้น newline หรือ NUL ไบต์
ไม่มีการอนุญาตหรือการอ้างอิงในรายการไฟล์ - ชื่อไฟล์ของคุณอาจมีช่องว่างทุกประเภท, แบ็กสแลช, backticks, ตัวละครเชลล์คาร์ดและอักขระตัวแทนอื่น ๆ ที่คล้ายกัน - xargsL จะประมวลผลเป็นอักขระตามตัวอักษร
ในฐานะที่เป็นคุณสมบัติโบนัสเพิ่ม xargsL จะไม่เรียกใช้คำสั่งอีกครั้งหากไม่มีอินพุต!
บันทึกความแตกต่าง:
$ true | xargs echo no data
no data
$ true | xargsL echo no data # No output
อาร์กิวเมนต์ใด ๆ ที่กำหนดให้ xargsL จะถูกส่งผ่านไปยัง xargs
นี่คือสคริปต์เชลล์ "xargsL" POSIX:
#! /bin/sh
# Line-based version of "xargs" (one pathname per line which may contain any
# amount of whitespace except for newlines) with the added bonus feature that
# it will not execute the command if the input file is empty.
#
# Version 2018.76.3
#
# Copyright (c) 2018 Guenther Brunthaler. All rights reserved.
#
# This script is free software.
# Distribution is permitted under the terms of the GPLv3.
set -e
trap 'test $? = 0 || echo "$0 failed!" >& 2' 0
if IFS= read -r first
then
{
printf '%s\n' "$first"
cat
} | sed 's/./\\&/g' | xargs ${1+"$@"}
fi
ใส่สคริปต์ลงในไดเรกทอรีใน $ PATH ของคุณและอย่าลืม
$ chmod +x xargsL
สคริปต์ที่นั่นเพื่อให้สามารถเรียกใช้งานได้