เชื่อมต่อไฟล์ในโฟลเดอร์เดียวใน Perl ใช้ linux shell script

ใน linux หากต้องการเชื่อมไฟล์ทั้งหมดเข้าด้วยกันภายใต้โฟลเดอร์ คุณสามารถทำได้ file=FOLDER/*; cat $file > ONEFILE ฉันต้องการใช้สิ่งนี้ในสคริปต์ Perl ของฉันด้วยดังนั้นฉันจึงเขียนโค้ดเช่น system("file=$folder/*"); system("cat \$file > $out");

แต่มันจะไม่ทำงานเมื่อฉันรันโปรแกรม Perl $out ได้รับการกำหนดชื่อไฟล์เป็น my $out = "outfile"; outfile จะคงไว้ที่ 0 บิตเสมอ เกิดอะไรขึ้นที่นี่


person lolibility    schedule 26.06.2012    source แหล่งที่มา
comment
ฉันคิดว่าฉันรู้ปัญหาแล้ว   -  person lolibility    schedule 26.06.2012


คำตอบ (2)


บรรทัดแรกตั้งค่าตัวแปรสภาพแวดล้อม $file ในกระบวนการเชลล์ใหม่:

system "file=$folder/*";

บรรทัดที่สองเริ่มกระบวนการเชลล์ใหม่ด้วยสภาพแวดล้อมใหม่:

system "cat \$file > $out";

เนื่องจากเป็นกระบวนการใหม่ ด้วยสภาพแวดล้อมใหม่ ตัวแปร $file ก่อนหน้าของคุณจึงไม่ได้ตั้งค่าอีกต่อไป ดังนั้นคุณจึงรันคำสั่งเชลล์ต่อไปนี้จริงๆ:

cat  > $out

ทำสิ่งนี้แทน:

system "cat '$folder/'* > '$out';

หมายเหตุ - ฉันยังได้เพิ่มเครื่องหมายคำพูด ซึ่งจะช่วยได้หากเส้นทางของคุณอาจมีช่องว่าง อย่างไรก็ตาม ยังไม่ปลอดภัยกับอินพุตทุกรูปแบบ ดังนั้นอย่าส่งต่ออินพุตของผู้ใช้ไปยังคำสั่งนั้นโดยไม่ตรวจสอบความถูกต้องก่อน

person We Are All Monica    schedule 26.06.2012

exec ในภาษา Perl คืออะไร

perl -e 'exec "cat *.txt"'

person Pavel Vlasov    schedule 26.06.2012