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

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

4
กำลังประมวลผลตัวแปร bash ด้วย sed
ตัวแปร bash LATLNG มีค่าละติจูดและลองจิจูดในวงเล็บเหลี่ยมเช่นนั้น (53.3096,-6.28396) ฉันต้องการแยกคำเหล่านี้เป็นตัวแปรที่เรียกว่า LAT และ LON ซึ่งฉันกำลังพยายามทำผ่านทาง sed เช่นนั้น LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG") LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG") อย่างไรก็ตามฉันได้รับข้อผิดพลาดต่อไปนี้: sed: can't read (53.3096,-6.28396): No such file or directory

7
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่หากตั้งค่าเชลล์ของรูทเป็นอย่างอื่นที่ไม่ใช่ค่าเริ่มต้น
เมื่อเพื่อนของฉัน (ซึ่งเป็นผู้ใช้ Unix / Linux ที่มีประสบการณ์) บอกฉันว่าการตั้งค่าเชลล์ของรูทเป็นอย่างอื่นที่ไม่ใช่ sh (เช่น bash หรือ zsh) อาจสร้างปัญหาได้เนื่องจากสคริปต์บางตัวอาจสันนิษฐานว่าเชลล์เป็น sh . อย่างไรก็ตามฉันคิดว่า Ubuntu มีรูทเชลล์เริ่มต้นที่ตั้งค่าเป็น bash และ Gentoo ก็ใช้ bash ด้วย ใครบางคนสามารถทำลายตำนานหรือไม่
16 shell  users  login  root 

3
ค้นหาด้วย -execdir
เมื่อฉันทำงานfindด้วย-execdirฉันไม่ได้รับผลลัพธ์ที่ฉันคาดหวัง ตัวอย่างเช่น: mkdir -p a/b/c find . -type d -execdir touch foo \; $ tree a a ├── b │ ├── c │ └── foo └── foo ไดเรกทอรีcไม่มีfooไฟล์ ฉันจะfindไปเยี่ยมชมและทำบางสิ่งในพื้นที่ในแต่ละไดเรกทอรีได้อย่างไร

2
mv: ไม่สามารถสถิติไม่มีไฟล์หรือไดเรกทอรีดังกล่าวในเชลล์สคริปต์
ฉันเขียนสคริปต์เพื่อย้ายไฟล์บางไฟล์ในรูปแบบโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่ง แต่ฉันพบข้อผิดพลาดต่อไปนี้ฉันตรวจสอบ 2 โฟลเดอร์และแจ้งให้ทราบสำหรับ 1 โฟลเดอร์มีไฟล์ดังกล่าวและอีกไฟล์หนึ่งไม่มีไฟล์ดังกล่าว แต่ทำไมทุกไฟล์แสดง "mv stat ไม่สามารถไม่มีไฟล์หรือไดเรกทอรีดังกล่าว " mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/194.199.68.165_tcp.folder/data/*': No such file or directory mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/194.42.17.124_tcp.folder/data/*': No such file or directory mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/195.113.161.13_tcp.folder/data/*': No such file or directory mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/203.159.127.3_tcp.folder/data/*': No such file or directory mv: cannot stat …
16 shell  rename 

1
เอาต์พุตของคำสั่งไม่ได้อยู่ใน stderr หรือ stdout
ฉันพบปัญหานี้แล้วฉันจึงสงสัยว่าจะเป็นไปได้อย่างไร คำสั่งรันแบบมาตรฐาน: # zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 info from server: "Processed 0 Failed 1 Total 1 Seconds spent 0.000017" sent: 1; skipped: 0; total: 1 ตกลงให้ลองรับบรรทัดแรกเท่านั้น: # zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head -1 sent: 1; skipped: 0; total: 1 หัวมาตรฐานล่ะ # zabbix_sender -c …
16 shell  stdout  stderr 

4
จะออกจากโปรแกรม sh ได้อย่างไร?
ฉันทำผิดคำสั่งและเขียน sh -man ตอนนี้ฉันเข้าสู่โปรแกรมที่เรียกsh-3.2ว่าเป็นไปไม่ได้ที่จะออก Ctrlc, CtrlzหรือCtrlxไม่ทำงาน exit, quit, q, :qยังไม่ได้ทำงาน คำตอบทั้งหมดของ Google ใช้สำหรับการออกจากเชลล์สคริปต์โดยทางโปรแกรม

2
วิธีตรวจสอบเป้าหมายของลิงก์สัญลักษณ์ที่มีสัญลักษณ์ไปยังเส้นทางที่ต้องการ
ภายในสคริปต์ทุบตีฉันรู้ว่าฉันสามารถตรวจสอบว่าไฟล์เป็นลิงค์สัญลักษณ์ที่มีไวยากรณ์ต่อไปนี้หรือไม่ if [ -L $path ] ไม่มีใครรู้ว่าฉันจะทดสอบว่าเส้นทางนั้นเชื่อมโยงกับเส้นทางเฉพาะหรือไม่ เช่นผมต้องการที่จะตรวจสอบว่าเป้าหมายของการเป็น$path/some/where
16 bash  shell  symlink 

5
วิธีการค้นหาและแทนที่สตริงโดยไม่ต้องใช้คำสั่ง Sed?
ในฐานะที่เราทุกคนรู้ว่าsedมีประสิทธิภาพอย่างมากในการค้นหาและแทนที่สตริงเช่นค้นหา 'a' และแทนที่มัน sed 's/a/b/g''B': เป็นไปได้ไหมที่จะทำสิ่งนี้กับคำสั่งหรือเชลล์สคริปต์แทนsed? นี่สำหรับระบบ linux ที่ถูกครอบตัดสำหรับทีวีที่ไม่มีsedคำสั่ง ดังนั้นฉันต้องใช้คำสั่งหรือสคริปต์อื่นแทนsed 's/a/b/g'. –

2
ฟองน้ำจาก moreutils - ความแตกต่างในการเปลี่ยนเส้นทางของเชลล์คืออะไร ตัวอย่างที่มีประโยชน์
> brew install moreutils ==> Downloading https://homebrew.bintray.com/bottles/moreutils-0.55.yosemite.bottle.tar.gz ######################################################################## 100.0% ==> Pouring moreutils0.55.yosemite.bottle.tar.gz 🍺 /usr/local/Cellar/moreutils/0.55: 67 files, 740K ฟองน้ำอ่านอินพุตมาตรฐานและเขียนมันออกไปยังไฟล์ที่ระบุ แตกต่างจากการเปลี่ยนเส้นทางของเชลล์ฟองน้ำดูดซับอินพุตทั้งหมดก่อนที่จะเขียนไฟล์เอาต์พุต สิ่งนี้อนุญาตให้สร้างท่อที่อ่านและเขียนไปยังไฟล์เดียวกัน ฉันไม่เข้าใจ โปรดยกตัวอย่างที่มีประโยชน์ให้ฉัน การดูดซับหมายถึงอะไร

3
อะไรคือความแตกต่างที่แน่นอนระหว่าง“ subshell” และ“ กระบวนการลูก”
ตามนี้และนี้เป็น subshell (…)จะเริ่มต้นโดยใช้วงเล็บ ( echo "Hello" ) ตามนี้ , นี้และนี้เป็นกระบวนการที่คดเคี้ยวเมื่อคำสั่งจะถูกเริ่มต้นด้วย& echo "Hello" & ข้อกำหนด Posix ใช้คำsubshellในหน้านี้แต่ไม่ได้กำหนดและยังอยู่ในหน้าเดียวกันที่ไม่ได้กำหนด "กระบวนการเด็ก" ทั้งสองกำลังใช้fork()ฟังก์ชันเคอร์เนลใช่ไหม อะไรคือความแตกต่างที่แน่นอนในการเรียกส้อม "sub-shell" และส้อมอื่น ๆ เรียกว่า "child process"
16 bash  shell  subshell 

8
Linux shell script: รันโปรแกรมเฉพาะในกรณีที่มีอยู่ให้เพิกเฉยหากไม่มีอยู่
ฉันกำลังเขียนโปรแกรมเชลล์สคริปต์ Linuxที่จะพิมพ์แบนเนอร์สถานะในระหว่างการดำเนินการเฉพาะเมื่อfigletมีการติดตั้งเครื่องมือที่เหมาะสม(นี่คือ: เข้าถึงได้บนเส้นทางของระบบ) ตัวอย่าง: #!/usr/bin/env bash echo "foo" figlet "Starting" echo "moo" figlet "Working" echo "foo moo" figlet "Finished" ฉันต้องการสำหรับสคริปต์ของฉันในการทำงานไม่มีข้อผิดพลาดแม้เมื่อfigletจะไม่ได้ติดตั้ง สิ่งที่อาจเป็นวิธีการปฏิบัติ ?

6
การใช้ / bin / sh ใน hashbang นั้นถูกต้องหรือไม่หากเชลล์เป้าหมายไม่สามารถใช้งานได้
#!/bin/shโดยทั่วไปเชลล์สคริปต์มีความคิดเห็นต่อไปนี้ที่บรรทัดแรกของไฟล์สคริปต์: จากการวิจัยที่ฉันทำมันเรียกว่า "hash bang" และมันเป็นความเห็นทั่วไป /binความคิดเห็นนี้แจ้งยูนิกซ์ว่าไฟล์นี้จะถูกดำเนินการโดยบอร์นเชลล์ภายใต้ไดเรกทอรี คำถามของฉันเริ่มต้นในจุดนั้น #!/bin/bashถึงตอนนี้ฉันไม่ได้เห็นความคิดเห็นนี้เช่น #!/bin/shมันก็มักจะ อย่างไรก็ตามการแจกแจง Ubuntu ไม่มีโปรแกรม Bourne Shell พวกเขามี Bourne Again Shell (ทุบตี) ในจุดนั้นถูกต้องหรือไม่ที่จะแสดงความคิดเห็น#!/bin/shในเชลล์สคริปต์ที่เขียนในการแจกแจงของ Ubuntu?

3
ORing ด้วยความจริงในคำสั่งมากกว่า ssh
เมื่อฉันพยายามเรียกใช้pkill -fจากระยะไกลผ่าน ssh และพยายามที่จะทิ้งรหัสข้อผิดพลาดที่เป็นไปได้ (เพื่อดำเนินการต่อกับส่วนที่เหลือของสคริปต์ของฉันแม้ว่าจะไม่พบกระบวนการ) || trueไม่ทำงานตามที่ฉันคาดหวัง $ pkill asdf || true $ echo $? 0 $ pkill -f asdf || true $ echo $? 0 $ ssh pi@10.20.0.10 "pkill asdf || true" $ echo $? 0 $ ssh pi@10.20.0.10 "pkill -f asdf || true" 255 ฉันคิดว่ามันเป็นsshที่ส่งกลับ 255 ไม่ใช่คำสั่งระหว่างเครื่องหมายคำพูด แต่ทำไม?
15 shell  ssh  kill 

3
ทุบตีตรวจสอบ $ PWD เป็นส่วนหนึ่งของเส้นทางเสมอหรือไม่
แบ็คกราวน์: หนึ่งในเพื่อนร่วมงานของฉันที่ไม่ได้มาจากพื้นหลัง Linux ถามฉันเกี่ยวกับการใช้./ก่อนคำสั่งบางคำสั่งและไม่ใช่คำสั่งอื่น ๆ ดังนั้นฉันจึงอธิบายให้เขาฟังว่าPATHทำงานอย่างไรและเลือกไบนารีอย่างไร คำตอบของเขาคือมันโง่และเขาแค่ไม่ต้องการพิมพ์./คำสั่งก่อน คำถาม: มีวิธีในการปรับเปลี่ยนพฤติกรรมของเชลล์อย่างง่ายดายซึ่ง$PWDเป็นรายการแรกเสมอPATHหรือไม่
15 shell  usability 

5
เป็นโปรแกรม "ถ้า" และ "แล้ว" ที่จริงแล้ว
ฉันอ่านว่าใช้เครื่องหมายอัฒภาคเพื่อคั่นโปรแกรม: $ echo 3; ls -la มันหมายความว่าอย่างนั้นifหรือthenและelseเป็นโปรแกรมแยกต่างหากที่นี่ $ if [ $VARIABLE == abcdef ] ; then echo yes ; else echo no ; fi คำถามนี้ไม่เกี่ยวกับเครื่องหมายอัฒภาค

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