คำถามติดแท็ก shell

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

5
ตัวแปรเช่น $ 0 และ $ 1 ตัวแปร shell / environment หรือไม่
มีตัวแปรในเปลือกเหมือน$0, $1, $2, $?ฯลฯ ฉันพยายามพิมพ์เชลล์และตัวแปรสภาพแวดล้อมโดยใช้คำสั่งต่อไปนี้: set แต่ตัวแปรเหล่านี้ไม่ได้อยู่ในรายการ ดังนั้นโดยทั่วไปแล้วตัวแปรเหล่านี้ไม่ถือว่าเป็นตัวแปรเชลล์ / สิ่งแวดล้อมใช่ไหม (แม้ว่าจะส่งออกคุณต้องนำหน้าพวกเขาด้วย$เช่นคุณทำกับตัวแปรเชลล์ / สภาพแวดล้อม)
17 shell 

2
หยุดการติดตามการดำเนินการ bash (set -x) จากด้านนอกของสคริปต์
ฉันพยายามหาคำตอบสำหรับคำถามนี้ แต่ก็ยังไม่มีโชค: ฉันมีสคริปต์ที่รันสคริปต์อื่น ๆ และสคริปต์อื่น ๆ เหล่านั้นมี "set -x" ในตัวพวกเขาซึ่งทำให้พวกเขาพิมพ์ทุกคำสั่งที่เรียกใช้ ฉันต้องการกำจัดสิ่งนั้น แต่เก็บข้อมูลไว้หากสคริปต์ใดส่งข้อความข้อผิดพลาดไปยัง stderr ดังนั้นฉันจึงไม่สามารถเขียน ./script 2>/dev/null นอกจากนี้ฉันไม่มีสิทธิ์ในการแก้ไขสคริปต์อื่น ๆ เหล่านั้นดังนั้นฉันจึงไม่สามารถเปลี่ยนตัวเลือกชุดได้ด้วยตนเอง ฉันกำลังคิดเกี่ยวกับการบันทึกทุกอย่างตั้งแต่ stderr ไปยังไฟล์แยกต่างหากและกรองคำสั่งการติดตาม แต่อาจจะมีวิธีที่ง่ายกว่านี้?
17 bash  shell  set 

2
วิธีการหลีกเลี่ยงพื้นที่หลังจากตัวแปร bash ในสตริง?
ฉันมีตัวแปรสำหรับสี ฉันใช้มันเพื่อตั้งค่าสีเป็นสตริงโดยการประเมินมันภายในสตริง อย่างไรก็ตามฉันต้องรวมช่องว่างหลังชื่อ (เพื่อให้ชื่อไม่มีส่วนของข้อความ) บางครั้งมันก็ดูไม่ดี ฉันจะหลีกเลี่ยงการใช้ (การพิมพ์) พื้นที่นี้ได้อย่างไร ตัวอย่าง (สมมติว่าอย่างนั้นRed=1และNC=2): echo -e "$Red Note: blabla$NC". เอาท์พุท: 1 Note: blabla2. ผลลัพธ์ที่คาดหวัง: 1Note: blabla2.

3
โปรแกรมจะตัดสินใจได้อย่างไรว่าจะให้สีออกมาหรือไม่?
เมื่อฉันรันคำสั่งจากเทอร์มินัลที่พิมพ์เอาต์พุตสี (เช่นlsหรือgcc) เอาต์พุตสีจะถูกพิมพ์ จากความเข้าใจของฉันกระบวนการกำลังส่งออกรหัสหลบหนี ANSIและเทอร์มินัลจะจัดรูปแบบสี อย่างไรก็ตามถ้าฉันรันคำสั่งเดียวกันโดยกระบวนการอื่น (พูดแอปพลิเคชัน C แบบกำหนดเอง) และเปลี่ยนเส้นทางเอาต์พุตไปยังเอาต์พุตของแอปพลิเคชันสีเหล่านี้จะไม่คงอยู่ โปรแกรมตัดสินใจอย่างไรว่าจะแสดงข้อความที่มีรูปแบบสีหรือไม่ มีตัวแปรสภาพแวดล้อมบ้างไหม?

7
จะสร้างไฟล์ขนาดใหญ่ใน UNIX ได้อย่างไร?
ฉันพบวิธีใน Windows ในการทำสิ่งนั้น echo "This is just a sample line appended to create a big file. " > dummy.txt for /L %i in (1,1,21) do type dummy.txt >> dummy.txt http://www.windows-commandline.com/how-to-create-large-dummy-file/ มีวิธีใดใน UNIX ที่จะคัดลอกไฟล์ผนวกและทำซ้ำกระบวนการหรือไม่? สิ่งที่ชอบfor .. cat file1.txt > file1.txt?
17 shell  files 

2
ถามรหัสผ่านในเชลล์ที่สอดคล้องกับ POSIX หรือไม่
เมื่อฉันต้องการขอรหัสผ่านในbashสคริปต์ฉันทำอย่างนั้น: read -s ... แต่เมื่อผมทำงานbashในโหมด POSIX กับshที่-sตัวเลือกที่ถูกปฏิเสธ: $ read -s sh: 1: read: Illegal option -s ฉันจะขออินพุตอย่างปลอดภัยด้วยคำสั่ง POSIX ได้อย่างไร

4
ช่องว่างถัดจากท่อ
ฉันเคยเห็นhistory | grep blahและhistory |grep blah; และใช้history|grep blahงานได้แม้ว่าจะไม่มีใครดูเหมือนจะใช้มัน มีความสำคัญในช่องว่างหรือไม่ (เช่นการไพพ์ไปยัง / จากคำสั่งที่แตกต่างกันต้องใช้การเว้นวรรคที่แตกต่างกัน) หรือมันเป็นกฎเกณฑ์เสมอ?
17 bash  shell  pipe 

1
rsync ซ้ำกับความลึกของโฟลเดอร์ย่อย
ฉันต้องการrsyncโฟลเดอร์ซ้ำ แต่ต้องการให้โฟลเดอร์ย่อยรวมอยู่ในระดับความลึกที่แน่นอน ตัวอย่างเช่นฉันต้องการความลึกของ 1,2,3 หรือ 4 โฟลเดอร์ย่อยเช่นนี้ source/ ├── subfolder 1 │ ├── subsubfolder │ │ ├── subsubsubfolder │ │ │ └── wanted with depth 4.txt │ │ └── wanted with depth 3.txt │ └── wanted with depth 2.txt ├── subfolder 2 │ └── wanted with depth 2.txt └── wanted …

1
ผลกระทบด้านความปลอดภัยของการใช้ข้อมูลที่ไม่ได้รับอนุญาตในการประเมินผลการคำนวณทางคณิตศาสตร์ของเชลล์
ในความคิดเห็นต่อคำถามล่าสุด Stéphane Chazelas กล่าวว่ามีผลกระทบด้านความปลอดภัยต่อวงเล็บทางคณิตศาสตร์สองหลักเช่น: x=$((1-$x)) บนเปลือกหอยส่วนใหญ่ ทักษะ Google ของฉันดูเหมือนจะเป็นสนิมและฉันไม่พบสิ่งใดเลย ผลกระทบด้านความปลอดภัยของเลขคณิตวงเล็บคู่คืออะไร?

4
ทำไม cat x >> x loop
คำสั่ง bash ต่อไปนี้จะเข้าสู่วง infinte: $ echo hi > x $ cat x >> x ฉันเดาได้ว่าcatอ่านต่อไปxหลังจากเริ่มเขียนไปยัง stdout แล้ว อย่างไรก็ตามสิ่งที่น่าสับสนคือการทดสอบการใช้งานแมวของฉันแสดงพฤติกรรมที่แตกต่าง: // mycat.c #include <stdio.h> int main(int argc, char **argv) { FILE *f = fopen(argv[1], "rb"); char buf[4096]; int num_read; while ((num_read = fread(buf, 1, 4096, f))) { fwrite(buf, 1, num_read, stdout); fflush(stdout); …

3
การเรียกใช้สคริปต์ sh: «การอนุญาตถูกปฏิเสธ»แม้จะมีบิตและรูทที่สามารถเรียกทำงานได้
ฉันติดตั้ง Debian ในVirtualBox (สำหรับการทดลองต่าง ๆ ซึ่งโดยปกติแล้วระบบของฉัน) และพยายามที่จะเปิดตัวสคริปต์ addon ของแขก VirtualBox ฉันเข้าสู่ระบบในฐานะ root และพยายามที่จะเปิดตัวautorun.shแต่ฉันได้รับ«การอนุญาตถูกปฏิเสธ» ls -lแสดงให้เห็นว่าสคริปต์มีสิทธิ์ดำเนินการ ขออภัยที่ฉันไม่สามารถคัดลอกผลลัพธ์ - VirtualBox ไม่มีประโยชน์อย่างแน่นอนหากไม่มี addon ไม่ว่าจะเป็นไดเรกทอรีที่ใช้ร่วมกันหรือคลิปบอร์ดที่ใช้ร่วมกันไม่ได้ แต่เพื่อให้แน่ใจว่าฉันคัดลอกสิทธิ์ด้วยมือ: #ls -l ./autorun.sh -r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh ตอนแรกฉันคิดว่าอาจเป็นเพราะสคริปต์ดำเนินการบางอย่างที่ทำให้เกิดข้อผิดพลาด ฉันพยายามแทนที่/bin/shด้วยสิ่งที่ชอบ#/pathtorealsh/sh -xvแต่ฉันไม่ได้ผลลัพธ์ - ดูเหมือนว่าสคริปต์จะไม่สามารถดำเนินการได้ ฉันยังไม่ทราบเลยว่าอะไรจะทำให้เกิด

2
ฉันจะใช้สีใน MOTD ได้อย่างไร?
ฉันแก้ไขค่าเริ่มต้น/etc/update-motd.d/00-headerเพิ่มสีเพื่อให้อ่านง่ายขึ้น: printf "Welcome to \e[1;34m%s\e[0m \e[2m(%s %s %s)\e[0m\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)" ฉันสามารถเรียกใช้บรรทัดของรหัสนั้นได้ดีในเทอร์มินัล แต่เมื่อฉันแก้ไข00-headerด้วยข้อมูลนี้ฉันจะได้รับรหัสหลบหนีที่พิมพ์ออกมาในแบบธรรมดา: Welcome to \e[1;36mUbuntu 13.10\e[0m \e[2m(GNU/Linux 3.11.0-23-generic i686)\e[0m ฉันจะเพิ่มสีสันลงในข้อความประจำวันได้อย่างไร
17 shell  ubuntu  colors  motd 

4
แจ้งให้ผู้ใช้ล็อกอินเป็นรูทเมื่อรันเชลล์สคริปต์
ปัญหาที่ฉันได้รับคือเมื่อฉันป้อนคำสั่ง su - root ที่จุดเริ่มต้นของไฟล์เชลล์สคริปต์ของฉันจะแจ้งให้ผู้ใช้ป้อนรหัสผ่านและจากนั้นจะไม่ดำเนินการกับสคริปต์เชลล์ส่วนที่เหลือต่อไป ฉันต้องค้นหาด้วยตนเองและเรียกใช้เชลล์สคริปต์ผ่านเทอร์มินัล ฉันต้องการสคริปต์เพื่อให้แน่ใจว่าผู้ใช้เข้าสู่ระบบในฐานะ root แล้วดำเนินการต่อกับส่วนที่เหลือของสคริปต์เชลล์ กล่าวอีกนัยหนึ่งฉันต้องการเรียกใช้สคริปต์ในฐานะผู้ใช้ใด ๆ แต่ทันทีที่สคริปต์เริ่มดำเนินการผู้ใช้จะต้องเปลี่ยนเป็นรูทแล้วดำเนินการต่อโดยใช้สคริปต์ที่เหลือเป็นรูทจนกว่าจะเสร็จ สามารถทำได้หรือไม่

3
ทำไมเครื่องหมายน้อยกว่าไม่ทำงานแทนแมวในทุบตี?
ฉันได้ยินเกี่ยวกับ "การใช้แมวที่ไร้ประโยชน์" และพบคำแนะนำบางอย่าง แต่ผลลัพธ์ต่อไปนี้ไม่มีอะไรในเปลือก bash ของฉัน < filename การใช้แมวทำงานได้ตามที่คาดหวัง cat filename ฉันใช้ Fedora Core 18 และ GNU ทุบตีรุ่น 4.2.45 (1) แก้ไข: การใช้งานที่ด้านหน้าของไปป์ไม่ทำงานเช่นกัน < filename | grep pattern ในขณะที่ใช้แมวทำงานตามที่คาดไว้ cat filename | grep pattern แก้ไข 2: เพื่อชี้แจงฉันรู้ว่าฉันสามารถใช้สิ่งนี้ grep pattern < filename แต่ฉันอ่านที่นี่/programming/11710552/useless-use-of-catว่าฉันยังสามารถใช้หน้าคำสั่ง มันไม่ทำงานต่อหน้าคำสั่งแม้ว่า

2
ฉันจะสตรีมข้อมูลไปยังโปรแกรมที่คาดว่าจะอ่านข้อมูลจากไฟล์ที่กำหนดเป็นอาร์กิวเมนต์ได้อย่างไร
ฉันมีไฟล์ gzipped ขนาดใหญ่และฉันต้องการโปรแกรม (4s-import ในกรณีนี้) เพื่ออ่าน ใช้เวลาในการคลายไฟล์ก่อนแล้วจึงเรียกโปรแกรมที่มีพา ธ ไปยังไฟล์เป็นอาร์กิวเมนต์ เป็นไปได้ไหมที่จะทำสิ่งที่ชอบ zcat huge.gz | 4s-import <SOME MAGIC> ที่ SOME-MAGIC เป็นเหมือนเส้นทางไปยังไฟล์นามธรรมที่มี stdin? ทางเลือกการใช้พื้นที่ดิสก์ที่ช้าลงและมากขึ้นที่ฉันต้องทำคือ: zcat huge.gz > huger 4s-import huger

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