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

Bash คือ Bourne Again SHell ผู้สืบทอดมาจาก Unix sh (shell) คลาสสิก

1
ฉันสามารถเรียก pushd / popd และป้องกันไม่ให้มันพิมพ์สแต็คได้หรือไม่?
หลังจากการเรียกpushd/ popdin bash มันจะพิมพ์ออกจากไดเรกทอรีสแต็คปัจจุบัน มีวิธีใดที่จะป้องกันพฤติกรรมนี้ได้ เสียงรบกวนในคำสั่งนี้เป็นเรื่องแปลกในเครื่องมือยูนิกซ์

2
การซ้อนคำสั่ง execer run / run shell
แนะนำสั้น ๆ เกี่ยวกับกรณีการใช้งาน: ฉันใช้dockerภาชนะที่จะทำงานของฉันการทดสอบโดยใช้go นี้สามารถทำได้อย่างง่ายดายโดยใช้go test ./... docker exec <container> /bin/sh -c "go test ./..."น่าเสียดายที่go test ./...ทำงานในไดเรกทอรีย่อยทั้งหมดและฉันต้องการยกเว้นหนึ่งไดเรกทอรี (ไดเรกทอรีผู้ขาย) ทางออกที่แนะนำสำหรับสิ่งนี้คือการใช้คำสั่งต่อไปนี้: go test $(go list ./... | grep -v '<excluded>'อย่างใดนี้ทำให้ฉันกับผลลัพธ์ต่อไปนี้: docker run golang:1.6.2-alpine /bin/sh -c "go test " (ฉันได้ทดสอบสิ่งนี้ทั้งการรันและการประมวลผล แต่พวกเขาอาจใช้แกนเดียวกัน) เมื่อฉัน ssh ลงในภาชนะที่ใช้docker exec -it <container_id> /bin/shและเรียกใช้คำสั่งเดียวกันแน่นอนมันทำงานเหมือนมีเสน่ห์ ดูเหมือนว่าการเรียกใช้คำสั่งเชลล์ในรางที่นักเรียกใช้ / รันไม่สนับสนุนคำสั่งใด ๆ ที่ซ้อนอยู่ด้วย$()?
15 bash  docker 

2
Bash Prompt ด้านล่างผลลัพธ์ - หางบันทึกประวัติความเป็นมา
ฉันเคยทำงานให้กับ บริษัท ที่มีเชลล์แบบกำหนดเองสำหรับการจัดการหนึ่งในผลิตภัณฑ์ของตนที่ใช้งานบน Linux และฉันต้องการจำลองคุณลักษณะสำคัญของเชลล์นี้ งานทั้งหมดทำโดยกระบวนการพื้นหลังและผลลัพธ์จากบันทึกแสดงต่อผู้ใช้ที่เชื่อมต่อทั้งหมด บันทึกจะอยู่ในพื้นหลังกับเชลล์ของคุณและบรรทัดพรอมต์จะอยู่ที่ด้านล่างเสมอ สำหรับเช่น Log line 1 Log line 2 Log line 3 ![ROOT@PRODUCT51-LIVE]:~/ # วิธีที่ฉันพยายามทำกับ bash คือการเริ่ม tail tail ในไฟล์. bashrc ของผู้ใช้ แต่เมื่อ output จากคำสั่งถูกส่งไปยัง stdout - มันมาใน bash prompt เช่น ![ROOT@PRODUCT51-LIVE]:~/ #Log line 1 Log line 2 Log line 3 และผู้ใช้จะต้องกด Enter หรือCtrlCสำหรับบรรทัดแจ้งให้สะอาด ฉันไม่มีแนวคิดเกี่ยวกับวิธีทำให้พรอมต์กระโดดไปที่ด้านล่างสุดของผลลัพธ์เสมอและฉันคิดว่าฉันใช้คำศัพท์ที่ผิดเพื่อค้นหาสิ่งใดใน …
15 linux  bash  shell  tail 

3
พฤติกรรมประวัติทุบตีแปลก ๆ เมื่อใช้หลายเซสชัน
ประวัติบรรทัดคำสั่งจะเก็บไว้อย่างไรเมื่อฉันใช้ windows terminal หลาย ๆ ฉันรู้ว่ามันถูกเก็บไว้ใน.bash_historyแต่ฉันไม่เห็นตรรกะเกี่ยวกับประวัติที่ใช้ถ้าฉันเปิดหน้าต่างใหม่ มันเกือบจะรู้สึกไม่เป็นระเบียบในแง่ที่ฉันไม่เคยรู้เลยว่าจะสั่งอะไรฉันจะดูว่าฉันพยายามใช้ลูกศรขึ้นในหน้าต่างใหม่หรือไม่ มีคนอธิบายเรื่องนี้ได้ไหม มีวิธีการควบคุมประวัติในลักษณะที่ฉันสามารถนำประวัติมาใช้ใหม่จากหน้าต่างใดหน้าหนึ่งได้หรือไม่

4
PID ของ bash child proccess (imapsync) - คุณจะรับมันได้อย่างไร?
ใครสามารถบอกวิธีการรับ PID ของคำสั่งดำเนินการในทุบตี เช่นฉันมีสคริปต์ทุบตีที่รัน imapsync เมื่อสคริปต์ถูกฆ่ากระบวนการ imapsync ไม่ได้ถูกฆ่าเสมอดังนั้นฉันต้องการที่จะระบุ PID ของ imapsync โดยทางโปรแกรมจากสคริปต์ของฉันเพื่อที่ฉันจะสามารถฆ่ากระบวนการ imapsync ด้วยตนเองในเครื่องจัดการสัญญาณ ดังนั้นฉันจะได้รับ PID ของกระบวนการเด็กโดยทางโปรแกรมจากผู้ปกครองสคริปต์ทุบตีได้อย่างไร
15 bash  pid  imapsync 

2
การนำ dry-run ไปใช้ในสคริปต์ทุบตี
วิธีหนึ่งจะใช้ตัวเลือกแห้งรันในสคริปต์ทุบตี? ฉันสามารถคิดถึงการห่อคำสั่งทุกคำสั่งในคำสั่ง if และ echoing คำสั่งแทนที่จะเรียกใช้ถ้าสคริปต์รันด้วยการรันแบบแห้ง อีกวิธีหนึ่งคือการกำหนดฟังก์ชั่นแล้วส่งการเรียกแต่ละคำสั่งผ่านฟังก์ชันนั้น สิ่งที่ต้องการ: function _run () { if [[ "$DRY_RUN" ]]; then echo $@ else $@ fi } `_run mv /tmp/file /tmp/file2` `DRY_RUN=true _run mv /tmp/file /tmp/file2` นี่เป็นสิ่งที่ผิดและมีวิธีที่ดีกว่าในการทำเช่นนี้?
15 bash 

7
วิธีรับชื่อแบบเต็ม (FQN) บน Unix ในสคริปต์ทุบตี
ฉันได้ทดสอบhostnameกับเซิร์ฟเวอร์หลายตัว (RedHat, Ubuntu) และhostname -fได้พิสูจน์แล้วว่าไม่น่าเชื่อถือบางครั้งจะส่งคืนชื่อสั้น ๆ เท่านั้น (ตามที่อธิบายไว้ในคำถามนี้ ) ฉันสามารถเห็น fqn ในนามแฝง: hostname -a(หนึ่งในนามแฝงคือ fqn ที่ฉันมองหา) แต่ลำดับของนามแฝงไม่ได้รับการแก้ไข มีวิธีอื่นในการรับชื่อที่ผ่านการรับรองโดยสมบูรณ์และเก็บไว้ในตัวแปร bash หรือไม่?
15 unix  bash  hostname 

2
ทำให้เอสเอสเงียบอย่างแท้จริง
ฉันครึ่งทางผ่านการเขียนสคริปต์ nagios และฉันได้รับความรำคาญกับ SSH ตามหน้าคน: -q Quiet mode. Causes all warning and diagnostic messages to be suppressed. แต่ถ้าฉันเปิดใช้งานสถานะเงียบแล้วผ่านพอร์ตที่ไม่ถูกต้องฉันยังคงได้รับข้อผิดพลาด: $ ssh user@localhost -q -p test Bad port 'test' นี่เป็นปัญหาเพราะนั่นจะทำให้ข้อความนั้นเป็นบรรทัดแรกและนั่นคือสิ่งที่ Nagios คว้า ฉันต้องการส่งออกบางอย่างเช่น "คำเตือน | ข้อผิดพลาด SSH" หลังจากรับ!= 0รหัสออกจาก ssh แต่บรรทัดแรกที่ฉันสามารถส่งออกได้จะเป็น 2 บรรทัด ฉันจะทำให้ SSH TRULY เงียบได้อย่างไร หมายเหตุ: ฉันไม่แน่ใจว่าจะโพสต์คำถามนี้บน serverfault, superuser หรือ …
15 ssh  bash  nagios 

7
ไม่ต้องการทั้งบรรทัดเพียงแค่การจับคู่จากนิพจน์ทั่วไป
ฉันเพียงแค่ต้องได้รับการแข่งขันจากการแสดงออกปกติ: $ cat myfile.txt | SOMETHING_HERE "/(\w).+/" ผลลัพธ์จะต้องเป็นสิ่งที่ตรงกันภายในวงเล็บ อย่าคิดว่าฉันสามารถใช้grep ได้เพราะมันตรงกับทั้งบรรทัด โปรดแจ้งให้เราทราบวิธีการทำเช่นนี้
15 bash  shell  grep  regex 

8
ทำให้ ls พิมพ์ทั้งหมดในหนึ่งบรรทัด (เช่นในเทอร์มินัล)
ls พิมพ์แตกต่างกันไปขึ้นอยู่กับว่าการส่งออกไปยังขั้วหรือสิ่งอื่น เช่น: $ ls . file1 file2 $ ls . | head file1 file2 มีวิธีที่จะlsพิมพ์ออกมาในหนึ่งบรรทัดราวกับว่ามันเป็นขั้วเมื่อมันไม่ได้ มี-Cอาร์กิวเมนต์ที่ sorta ทำ แต่จะแยกออกเป็นหลายบรรทัด $ ls file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file3 file4 file5 file6 file7 file8 file9 $ ls -C . | head file1 file11 file13 …

3
วิธีเก็บรักษา: สำรองข้อมูลรายวันสำหรับสัปดาห์รายสัปดาห์สำหรับเดือนรายเดือนสำหรับปีและรายปีหลังจากนั้น
ฉันต้องการสำรองข้อมูลและกำหนดค่าไฟล์บนเซิร์ฟเวอร์นี้ทุกวัน ฉันต้องการที่จะเก็บ: สำรองข้อมูลรายวันเป็นเวลาหนึ่งสัปดาห์ สำรองข้อมูลรายสัปดาห์สำหรับเดือน สำรองข้อมูลรายเดือนสำหรับปี สำรองข้อมูลรายปีหลังจากนั้น ทั้งหมดนี้ทำได้ผ่านเชลล์สคริปต์ที่รันทุกวันจาก cron นี่คือวิธีที่ไฟล์สำรองควรดูแล 10 ปีของการทำงาน: blog-20050103.tar.bz2 blog-20060102.tar.bz2 blog-20070101.tar.bz2 blog-20080107.tar.bz2 blog-20090105.tar.bz2 blog-20100104.tar.bz2 blog-20110103.tar.bz2 blog-20120102.tar.bz2 blog-20130107.tar.bz2 blog-20130902.tar.bz2 blog-20131007.tar.bz2 blog-20131104.tar.bz2 blog-20131202.tar.bz2 blog-20140106.tar.bz2 blog-20140203.tar.bz2 blog-20140303.tar.bz2 blog-20140407.tar.bz2 blog-20140505.tar.bz2 blog-20140602.tar.bz2 blog-20140707.tar.bz2 blog-20140728.tar.bz2 blog-20140804.tar.bz2 blog-20140811.tar.bz2 blog-20140816.tar.bz2 blog-20140817.tar.bz2 blog-20140818.tar.bz2 blog-20140819.tar.bz2 blog-20140820.tar.bz2 blog-20140821.tar.bz2 blog-20140822.tar.bz2
14 linux  backup  bash 

1
Bash บอกฉันว่าใช้คีย์สาธารณะ SSH ใดในการตรวจสอบ?
สมมติว่าฉันต้องการติดตามrootผู้ใช้ของฉัน /root/.ssh/authorized_keysแต่ละคนมีคีย์ส่วนตัวที่ไม่ซ้ำกันและกุญแจสาธารณะของพวกเขาได้รับการจัดเก็บไว้ใน ระบุว่าผู้ใช้แต่ละคนลงชื่อเข้าใช้ด้วยคีย์เฉพาะของพวกเขาฉันจะบอกได้อย่างไรจากภายในเซสชัน BASH ว่าใช้คีย์ใดในการตรวจสอบสิทธิ์ ฉันลองดูตัวแปรสภาพแวดล้อมเมื่อฉันเข้าสู่ระบบ แต่ไม่เห็นสิ่งใดที่สัมพันธ์กับเซสชันของฉันด้วยรหัสสาธารณะของฉัน
14 bash  ssh-keys 

4
เป็นไปได้ที่จะปิดการใช้งาน“ คุณมีจดหมายใหม่ใน / var / mail / root” หรือไม่
ฉันต้องการปิดการใช้งาน mailcheck ใน FreeBSD 9.1 เชลล์ล็อกอินของฉันคือ BASH ดังนั้นฉันได้ลองเพิ่มแล้ว unset MAILCHECK ใน/root/.bashrcและ/root/.profileแต่ฉันยังคงได้รับข้อความเหล่านั้น คำถาม มีวิธีกำจัดข้อความเหล่านี้หรือไม่?
14 bash  freebsd 

7
SSH เทียบเท่ากับ. profile / .bashrc
ฉันกำลังมองหาวิธีที่จะกำหนดชื่อแทนบางอย่างโดยอัตโนมัติภายในเซสชันของฉันบนเซิร์ฟเวอร์ใด ๆ ที่ฉันต้องการไป ฉันไม่สามารถวางไว้ใน.bashrcไฟล์บนเซิร์ฟเวอร์เพราะบัญชีผู้ใช้ที่ฉันเข้าสู่ระบบแชร์โดยคนอื่นและนอกจากนั้นยังมีอีกหลายสิบและการบำรุงรักษาสคริปต์ในทุกเครื่องจะเจ็บปวด ฉันรู้ว่าฉันสามารถใช้expectเพื่อพิมพ์นามแฝงโดยอัตโนมัติ แต่ฉันแค่สงสัยว่า OpenSSH มีอะไรในตัวที่สามารถใช้เพื่อให้บรรลุสิ่งนี้ได้หรือไม่
14 ssh  bash 

3
ตรวจสอบว่าติดตั้งพลอยทับทิมจากสคริปต์ทุบตี
ฉันต้องตรวจสอบเพื่อดูว่ามีการติดตั้งอัญมณีทับทิมจากสคริปต์ทุบตีหรือไม่ ฉันคิดว่าฉันสามารถทำอะไรบางอย่างเช่น if ! gem list <name>; then do_stuff; fi แต่การทดสอบในบรรทัดคำสั่งที่ใช้echo $?แสดงให้เห็นว่าgem list <name>ผลตอบแทน 0 โดยไม่คำนึงถึงว่าชื่อจะพบจริง นี่หมายความว่าฉันต้องใช้ grep เพื่อกรองผลลัพธ์ของรายการ gem หรือมีวิธีที่ดีกว่าที่ฉันสามารถตรวจสอบเพื่อดูว่าติดตั้ง gem หรือไม่
14 bash  gem 

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