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

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

3
วิธีดาวน์โหลดไฟล์ล่าสุดในโฟลเดอร์โดยใช้ scp
ฉันต้องการเรียกใช้ scp transfer เพื่อดาวน์โหลดไฟล์ล่าสุด (ล่าสุด) ในไดเรกทอรีหนึ่งไปยังไดเรกทอรีท้องถิ่นของฉัน บางสิ่งเช่นนี้ แหล่งที่มา :root@rimmer.sk:/home/rimmer/backups/ ปลายทาง :/home/rimmer/backups/ backupsขณะที่ได้รับไฟล์ใหม่เท่านั้นไม่ทั้งหมดของพวกเขาใน
10 shell  ssh  file-copy 

2
อะไรคือความแตกต่างระหว่าง“ * .pl” และ * .pl ใน grep? ทำไมการอ้างถึงเปลี่ยนผลลัพธ์?
อะไรคือความแตกต่างระหว่าง: grep "string" . -r --include *.pl และ grep "string" . -r --include "*.pl" หลังรวมถึงไฟล์ในไดเรกทอรีย่อยในขณะที่อดีตไม่ ทำไม?

5
วิธีทำ 'cd dir / filename` พาฉันไป dir /?
ฉันคิดว่ามันสะดวกที่จะใช้cdกับอาร์กิวเมนต์ไฟล์ cd myDirectory/anyname.anyExtension จะเทียบเท่า cd myDirectory/ อะไรคือนามแฝงหรือหน้าที่ที่ดีที่สุดเพื่อให้บรรลุพฤติกรรมนี้ แก้ไข : ขอโทษฉันไม่ได้พูดถึงมันในสถานที่ที่ 1: ฉันใช้zsh
10 shell  cd-command 

4
รับ stdin จากไปป์ที่มีชื่อ
สิ่งที่ฉันพยายามทำคือใช้ python ในหน้าต่างเทอร์มินัลและเปลี่ยนเส้นทางมันเป็น stdin จากไพพ์ที่มีชื่อ จากนั้นฉันเขียนไปที่ไปป์ที่มีชื่อในเทอร์มินัลอื่นและมีคำสั่งที่รันบนหลาม อาคาร 1: mkfifo p1 python < p1 อาคาร 2: echo -n "print \"Hello World\"" > p1 สิ่งที่เกิดขึ้นคือ - หลามพิมพ์Hello Worldและออกจาก สิ่งที่ฉันต้องการจะทำคือให้หลามใช้คำสั่งถัดไป ฉันจะทำสิ่งนี้ในเปลือกได้อย่างไร

5
ฉันจะใช้คำสั่ง If-Else ตามวันในสัปดาห์ได้อย่างไร
ปัญหา: ฉันต้องตรวจสอบว่าวันนี้เป็นวันพฤหัสบดีหรือไม่และดำเนินการต่าง ๆ ตามผลลัพธ์ของเงื่อนไขนี้ ฉันลองวิธีที่แตกต่างกันสองวิธี: ได้รับชื่อวัน: DAYOFWEEK=$(date +"%a") echo DAYOFWEEK: $DAYOFWEEK if ["$DAYOFWEEK" == "Thu"]; then echo YES else echo NO fi รับวัน NUM: DAYOFWEEK=$(date +"%u") echo DAYOFWEEK: $DAYOFWEEK if ["$DAYOFWEEK" == 4]; then echo YES else echo NO fi ในทั้งสองกรณีผลลัพธ์คือ NO แม้ว่ามันควรจะเป็นใช่ เกิดอะไรขึ้น?

2
วิธีที่ดีในการเปรียบเทียบเวลา
ฉันต้องตรวจสอบเวลาปัจจุบันและยกเลิกสคริปต์หากไม่ใช่เวลาที่เหมาะสมของวันที่ฉันควรจะรัน นอกจากนี้หากใครก็ตามที่ทำงานมันควรยกเลิก ตัวอย่างเช่น: ฉันต้องการสคริปต์ของฉันให้ทำงานเฉพาะเมื่อเริ่มต้นระหว่าง 22.00 น. ถึง 2.00 น. (หน้าต่าง 4 ชั่วโมง) ขณะนี้ฉันกำลังทำต่อไปนี้ สละเวลากับdate +%k%Mและเปรียบเทียบกับหมายเลขที่เข้ารหัสยาก #!/bin/sh currTime=`date +%k%M` check_time_to_run() { tempTime=$1 if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then echo "Time is between 2 AM and 10 PM. Aborting." exit 1 else echo "Time is after 10 …

2
จัดการชื่อไฟล์ piped จากคำสั่ง find
ฉันค่อนข้างใหม่กับ Bash และฉันพยายามทำบางสิ่งที่บนพื้นผิวนั้นค่อนข้างตรงไปตรงมา - ลองค้นหาลำดับชั้นของไดเรกทอรีเพื่อรับไฟล์ * .wma ทั้งหมดไปป์ที่เอาต์พุตไปยังคำสั่งที่ฉันแปลงเป็น mp3 และ บันทึกไฟล์ที่แปลงเป็น. mp3 ฉันคิดว่าคำสั่งควรมีลักษณะดังต่อไปนี้ (ฉันได้ละทิ้งคำสั่งการแปลงเสียงและฉันใช้ echo แทนภาพประกอบ): $ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3 ตามที่ฉันเข้าใจแล้ว -print0 arg จะให้ฉันจัดการกับชื่อไฟล์ที่มีช่องว่าง ฉันคาดหวังว่า (เนื่องจาก xargs) ว่าแต่ละพา ธ ไฟล์จาก find ถูกดักจับใน f และการใช้ซับสตริงจับคู่ / ลบจากจุดสิ้นสุดของสตริงนั้นฉันควรจะสะท้อนพา ธ ไฟล์ดั้งเดิมด้วย mp3 …

1
เชลล์แบบโต้ตอบควรทำอย่างไรในกลุ่มกระบวนการที่ถูกโยงถึง
(โพสต์ซ้ำในยูนิกซ์ตามคำแนะนำใน/programming/13718394/what-should-interactive-shells-do-in-orphaned-process-group ) คำถามสั้น ๆ คือเชลล์ควรทำอย่างไรถ้าอยู่ในกลุ่มกระบวนการที่ถูกโยงถึงที่ไม่มี tty อยู่? แต่ฉันแนะนำให้อ่านคำถามยาว ๆ เพราะมันสนุก นี่คือวิธีที่สนุกและน่าตื่นเต้นในการเปลี่ยนแล็ปท็อปของคุณให้เป็นเครื่องทำพื้นที่พกพาโดยใช้เปลือกที่คุณชื่นชอบ (ยกเว้นว่าคุณเป็นหนึ่งในพวก tcsh weirdos): #include <unistd.h> int main(void) { if (fork() == 0) { execl("/bin/bash", "/bin/bash", NULL); } return 0; } ทำให้ bash ตรึง CPU ที่ 100% zsh และปลาทำแบบเดียวกันในขณะที่ ksh และ tcsh พึมพำอะไรบางอย่างเกี่ยวกับการควบคุมงานและจากนั้นก็กระดูกงูซึ่งดีกว่าเล็กน้อย แต่ไม่มาก โอ้และเป็นผู้กระทำความผิดที่ไม่เชื่อเรื่องพระเจ้าแพลตฟอร์ม: OS X และ Linux ได้รับผลกระทบทั้งคู่ …

1
การกู้คืนไฟล์ที่ถูกลบที่ค้างไว้เปิดโดย apache?
สมมติว่าไฟล์บันทึก apache ถูกลบ แต่ถูกระงับโดย apache นี่คือสิ่งที่ฉันทำ: pid=$(lsof | grep text.txt | awk '/deleted/ {print $2}') fd=$(lsof | grep text.txt | awk '/deleted/ {print $4}' | grep -oE "[[:digit:]]{1,}") cp /proc/$pid/fd/$fd directorytobecopied/testfile.txt นี่คือสิ่งที่ฉันกำลังทำเพื่อกู้คืนไฟล์และนำกลับไปวางไว้ที่เดิม มีวิธีที่ง่ายกว่าในการทำเช่นนี้เพราะรหัสด้านบนดูไม่ดี นอกจากนี้ฉันจะรู้ได้อย่างไรว่าไฟล์ถูกลบไปที่ไหน ( directorytobececied ) เพื่อที่ฉันจะได้ไม่ต้องถามใครสักคนว่าไฟล์นั้นอยู่ที่ใดและอยู่ที่นั่น

3
การทดแทนกระบวนการครั้งแรกเกิดขึ้นเมื่อใด
ฉันแปลกที่จะรู้ว่านานแค่ไหนทดแทนกระบวนการได้รับรอบ มีเปลือกอะไรก่อน? เมื่อไหร่ที่มันจะถูกเพิ่มเข้าไปในกระสุนอื่น ๆ ?

1
คุณตั้งค่าสภาพแวดล้อมสำหรับ es อย่างไร
ฉันได้เล่นกับesในสองสามวันที่ผ่านมาและมัน (เช่น rc) มีการเล่นโวหาร / คุณลักษณะที่จะเรียกใช้สคริปต์เริ่มต้นเท่านั้น ( .esrc) เมื่อเข้าสู่ระบบ วิธีปกติในการเรียกใช้รหัสในแต่ละเซสชันแบบโต้ตอบคือการใส่รหัสนั้นลงใน%promptฟังก์ชัน แน่นอนว่าไม่มี%promptฟังก์ชั่นหากes -lไม่เคยทำงาน ดังนั้นคำถาม: คุณจะตั้งค่าสภาพแวดล้อมการเข้าสู่ระบบอย่างไรเมื่อคุณเข้ามาผ่านทาง gdm หรือคล้ายกันซึ่งแหล่งที่มาเฉพาะ. profile (หรือ. xprofile, .xsession ฯลฯ ) สิ่งที่ดีที่สุดที่ฉันคิดไว้คือ: if [ -f "$HOME/.esrc" ]; then eval "`es -l <<-x sh <<<'export -p' x`" fi ซึ่งดูเหมือน ... น่ากลัว มีวิธีใดที่ดีกว่านี้?

2
วิธีการตั้งค่าบิตเรียกใช้งานสำหรับไฟล์เฉพาะโดยอัตโนมัติ
ฉันต้องการที่เมื่อฉันสร้างไฟล์เฉพาะสมมติว่าฉันสร้างในเครื่องมือแก้ไขเป็นกลุ่มไฟล์ที่สร้างควรได้รับอนุญาตปฏิบัติการเช่นกันเมื่อมันได้รับการสร้าง ฉันต้องการสิ่งนี้ในขณะที่ฉันกำลังสร้างไฟล์หลามและไม่ต้องการตั้งค่าการอนุญาตสำหรับไฟล์อย่างชัดเจนดังนั้นฉันต้องการวิธีที่จะให้บิตที่ใช้งานได้ถูกตั้งค่าทันทีที่ฉันสร้างไฟล์ที่มีนามสกุลเฉพาะหรือด้วยโปรแกรมแก้ไขเฉพาะ
10 shell  vim  editors 

3
ป้อนข้อความโดยอัตโนมัติจากสคริปต์ทุบตีโดยไม่ต้องใช้ EOF
ฉันใช้ Ubuntu Linux myprogramสมมติว่ามีโปรแกรมที่เรียกว่า โปรแกรมนี้ให้ผู้ใช้ป้อนข้อมูล Enterโดยเฉพาะผู้ใช้ต้องพิมพ์เป็นจำนวนเต็มเมื่อได้รับแจ้งและกด ฉันต้องการทำให้กระบวนการนี้เป็นแบบอัตโนมัติโดยใช้สคริปต์ทุบตี โดยเฉพาะอย่างยิ่งฉันต้องการที่จะดำเนินการmyprogramพูด 100 ครั้ง (ใช้เคาน์เตอร์iที่ไปจาก1ไป100) ในการดำเนินการแต่ละครั้งmyprogramฉันต้องการป้อนค่าปัจจุบันของiเมื่อได้รับแจ้ง (โดยวิธีการmyprogramใช้ตัวเลือก / สวิทช์-optionsซึ่งทั้งหมดจะคงที่และระบุไว้ในสคริปต์ทุบตี) โครงกระดูกที่ไม่สมบูรณ์ของสคริปต์ทุบตีนี้อาจเป็น: #!/bin/bash for i in {1..100} do myprogram -options done ตอนนี้ฉันต้องการแก้ไขโค้ดด้านบนเพื่อให้iป้อนค่าปัจจุบันของเมื่อได้รับแจ้งจากโปรแกรม วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร? เว็บไซต์ของซอฟต์แวร์ที่ฉันใช้แนะนำให้ใช้<<EOFที่ท้ายmyprogram -optionsบรรทัด ฉันคิดว่าสิ่งนี้บอกให้ทุบตีดูที่ "จุดสิ้นสุดของไฟล์" สำหรับอินพุตที่จะใช้ แต่ถ้าฉันไม่ต้องการวางอินพุตที่ท้ายไฟล์ล่ะ เกิดอะไรขึ้นถ้าผมอยากจะใส่มันทันทีหลังจากที่<<หรือ<? เหตุผลก็คือสิ่งต่าง ๆ จะมีความซับซ้อนมากขึ้น ตัวอย่างเช่นฉันอาจแนะนำตัวนับจำนวนเต็มที่jเปลี่ยนแปลงในวิธีที่ไม่เป็นเชิงเส้นหรือไม่ต่อเนื่อง จากนั้นผมก็อยากจะกินค่าปัจจุบันของjไปmyprogramในแต่ละซ้ำ แต่ค่าของjอาจมีการเปลี่ยนแปลงระหว่างการโทรไปและจุดสิ้นสุดของแฟ้ม myprogram -optionsEOF คุณมีข้อเสนอแนะใด?

3
ฉันจะ cd ไปยังไดเรกทอรี sibling ก่อนหน้า / ถัดไปได้อย่างไร
ฉันมักจะมีรูปแบบไดเรกทอรีโครงการเช่นนี้ project `-- component-a | `-- files... `-- component-b | `-- files... `-- component-c `-- files... ฉันมักจะทำงานในหนึ่งในcomponentไดเรกทอรีเพราะนั่นคือที่ที่ไฟล์อยู่ เมื่อฉันกลับไปที่เชลล์ฉันมักจะต้องย้ายไปยังไดเรกทอรี sibling โดยเฉพาะอย่างยิ่งเมื่อฉันจำเป็นต้องทำการเปลี่ยนแปลงที่ไม่สามารถเขียนสคริปต์ได้ทุกองค์ประกอบ ในกรณีเหล่านั้นฉันจะไม่สนใจสิ่งที่ไดเรกทอรีพี่น้องก่อนหน้าคือที่ฉันจะทำงานหรือไดเรกทอรีพี่น้องถัดไป ฉันสามารถกำหนดคำสั่งprevหรือnextว่าcdฉันจะเข้าไปในไดเรกทอรีก่อนหน้าหรือไดเรกทอรีถัดไป (ตามตัวอักษรหรืออะไรก็ตาม) ได้อย่างง่ายดายหรือไม่? เพราะการพิมพ์cd ../com<TAB><Arrow keys>ตลอดเวลากำลังจะแก่ลงสักหน่อย

2
การเชื่อมต่อ STDOUT และ STDIN หมายถึงอะไร
ฉันอ่านหนังสือมันพูดว่า: ทุกกระบวนการมีช่องทางการสื่อสารอย่างน้อยสามช่อง: "อินพุตมาตรฐาน" (STDIN), "เอาต์พุตมาตรฐาน" (STDOUT) และ "ข้อผิดพลาดมาตรฐาน" (STDERR) คำสั่งส่วนใหญ่ยอมรับอินพุตจาก STDIN และเขียนเอาต์พุตไปยัง STDOUT พวกเขาเขียนข้อความแสดงข้อผิดพลาดไปยัง STDERR การประชุมนี้ช่วยให้คุณสามารถใช้คำสั่งสตริงร่วมกันเช่นแบบเอกสารสำเร็จรูปเพื่อสร้างไปป์ไลน์คอมโพสิต เปลือกตีความสัญลักษณ์<, >และ>>เป็นคำแนะนำในการเปลี่ยนเส้นทางการป้อนคำสั่งหรือการส่งออกไปยังหรือจากไฟล์ ในการเชื่อมต่อ STDOUT ของคำสั่งเดียวกับ STDIN ของอีกคำสั่งให้ใช้| สัญลักษณ์ที่รู้จักกันทั่วไปว่าเป็นไปป์ ps -ef | grep httpd ดังนั้นโดยทั่วไปสิ่งที่กล่าวคืออินพุตมาตรฐานเป็นคำสั่งที่อนุญาตให้ผู้ใช้เขียนไฟล์ในขณะที่เอาต์พุตมาตรฐานเป็นคำสั่งที่มี bash เชลล์เขียนเอาต์พุตไปยังเชลล์และข้อผิดพลาดมาตรฐานเป็นเหมือนเอาต์พุต แต่เป็นเพียง เรียกใช้เมื่อมีข้อผิดพลาดในระบบไฟล์ จากนั้นเราไปถึงส่วนของการเชื่อมต่อ STDOUT และ STDIN และฉันก็หลงทาง

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