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

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

2
วิธีทำให้ tar บันทึกไฟล์เก็บถาวรบนเครื่องระยะไกลโดยใช้ sftp หรือ ftp
ฉันต้องการสำรองข้อมูลสำคัญบางอย่างของฉันในเครื่องระยะไกล ขณะนี้ฉันเพิ่งบันทึกลงในเครื่องท้องถิ่นของฉันโดยใช้คำสั่งนี้:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/* ฉันไม่ต้องการใช้คำสั่งอื่นเพื่อส่งผ่านไปยังเครื่องระยะไกลซึ่งหมายความว่าฉันต้องการเพียงอัปเกรดคำสั่งนี้เพื่อให้สามารถถ่ายโอนข้อมูลไปยังเครื่องระยะไกลได้ สิ่งนี้ได้รับการออกแบบให้อยู่ในสคริปต์ในภายหลังซึ่งถูกเรียกใช้ด้วยตัวเองหมายความว่าการป้อนข้อมูลผู้ใช้ทุกประเภทที่จำเป็นจะทำให้สับสนได้! สิ่งที่ต้องการ tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/* tar -cvjf ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/* จะสมบูรณ์แบบ! (ไม่มีท่อ (ฯลฯ ) เพียงคำสั่งเดียว!)
10 bash  tar  ftp  remote  sftp 

1
ทำไมเทอร์มินัลไม่แสดงสกีมาสีเมื่อบันทึกเป็นรูทแล้ว
ขณะนี้ฉันใช้ Debian 7 Wheezy และฉันสังเกตเห็นว่าจานสีบนเทอร์มินัล (ซึ่งอาจเป็นประโยชน์ในการระบุในกลุ่มของไฟล์และโฟลเดอร์ขนาดใหญ่) ไม่ได้เปิดใช้งานเมื่อฉันเข้าสู่ระบบในฐานะรูท ฉันได้สังเกตเห็นว่าความสำเร็จของแท็บไม่เหมือนกันในสถานการณ์นี้ ฉันจะกำหนดค่าปัญหาเหล่านี้ได้อย่างไร
10 bash  shell  root  colors 

2
ไม่พบคำสั่ง bash setenv
เมื่อฉันใช้คำสั่งดังต่อไปนี้ setenv CLASSPATH /path/mysql-connector-java-ver-bin.jar:$CLASSPATH ข้อผิดพลาดคือ bash setenv command is not found เมื่อฉันค้นหาเส้นทางของ setenv โดยคำสั่งใดฉันพบเส้นทางดังต่อไปนี้ (/usr/kerberos/sbin:/usr/kerberos/bin:/home/ec2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/ec2/bin:/root/bin)

3
ฉันจะ cd ลงในไดเรกทอรีเป็น root ได้อย่างไร
สมมติว่ามีไดเรกทอรีที่ฉันไม่มีสิทธิ์เข้าถึง เห็นได้ชัดsudo cd fooว่าไม่ได้ผลเพราะcdเปลือกหอยมีอยู่ในทุก ๆ เปลือก จนถึงตอนนี้ฉันเพิ่งใช้sudo bash(ใช่ฉันรู้ว่ามีวิธีที่ดีกว่า) เพื่อรับรูทพรอมต์ จากนั้นฉันสามารถcdเข้าไปในไดเรกทอรีเพื่อแหย่ มีวิธีที่ดีกว่าในการทำเช่นนี้?
10 bash  sudo  cd-command 

2
ส่งผ่านข้อโต้แย้งไปยังฟังก์ชั่นตรงตามที่เป็นอยู่
ฉันมีฟังก์ชั่นต่อไปนี้: bar() { echo $1:$2; } ฉันกำลังเรียกฟังก์ชั่นนี้จากฟังก์ชั่นอื่น , foo. fooตัวเองเรียกว่าดังนี้: foo "This is" a test ฉันต้องการรับผลลัพธ์ต่อไปนี้: This is:a นั่นคือข้อโต้แย้งที่ได้รับควรจะราชสกุลเดียวกันกับที่ผมผ่านเข้าไปbarfoo จะfooต้องมีการดำเนินการอย่างไรเพื่อให้บรรลุเป้าหมายนี้? ฉันได้ลองใช้งานสองแบบต่อไปนี้ แต่ก็ไม่ได้ผล: foo() { bar $*; } - เอาท์พุท: this:is foo() { bar "$*"; } - เอาท์พุท: this is a test: คำถามของฉันคือวิธีที่ฉันสามารถรักษาข้อโต้แย้ง เป็นไปได้ทั้งหมดหรือไม่

3
cd ไปยังไดเรกทอรีและดำเนินการคำสั่งมากมาย
ฉันมีสคริปต์ต่อไปนี้ #!/bin/bash mount /dev/sda6 /mnt/gentoo set +e cd /mnt/gentoo && mount -t proc none /mnt/gentoo/proc \ && mount --rbind /dev /mnt/gentoo/dev \ && mount --rbind /sys /mnt/gentoo/sys \ && chroot /mnt/gentoo /bin/bash \ && source /etc/profile \ && export PS1="(chroot)$PS1" สิ่งที่ฉันพยายามทำให้สำเร็จที่นี่คือการเปลี่ยนไดเรกทอรี/mnt/gentooและดำเนินการคำสั่งบางอย่าง การทำงานนี้ตกลงครั้งแรกเมื่อไม่มีการติดตั้งพา ธ แต่ถ้าฉันเรียกใช้หลังจากติดตั้งเรียบร้อยแล้วในบางเส้นทางจะไม่ดำเนินการต่อและหยุดเมื่อเกิดความล้มเหลวครั้งแรก ฉันต้องการให้คำสั่งทั้งหมดถูกเรียกใช้แม้ว่าการเมาต์จะล้มเหลวเนื่องจากข้อผิดพลาด 'เมาท์แล้ว' ฉันจะทำสิ่งนี้ได้อย่างไร นอกจากนี้ยังมีวิธีที่ดีกว่าการรวมคำสั่งเหล่านี้ทั้งหมดเข้าด้วยกันในหนึ่งบรรทัด?
10 bash 

7
CentOS | [root @ hostname] ไม่แสดงอีกต่อไปหรือ
ด้วยเหตุผลบางอย่างฉันเข้าสู่เซิร์ฟเวอร์ CentOS6 ของฉันและที่จุดเริ่มต้นของทุกบรรทัดมันแสดงให้เห็นตามปกติ [root@hostname]# ตอนนี้มันแสดงให้เห็น -bash-4.1# สิ่งนี้หมายความว่า? และฉันจะทำให้มันกลับมาเป็นปกติได้อย่างไร?
10 centos  bash 

2
รีเฟรชแท็บ bash ให้สมบูรณ์
ฉันมีสคริปต์สำหรับเติม ssh-hosts ของฉันโดยอัตโนมัติ หากฉันเปลี่ยน~/.ssh/configการเติมข้อมูลอัตโนมัติของฉันไม่ได้รับการอัพเดตโดยอัตโนมัติ นี่ไม่ได้ทำให้ฉันประหลาดใจ ในเชลล์ใหม่รายการใหม่ถูกหยิบขึ้นมาและใช้งานได้แน่นอน ฉันจะเรียกการรีเฟรชของความสำเร็จด้วยตนเองได้อย่างไร

4
ตรรกะและในสคริปต์ทุบตี
ฉันมีifในสคริปต์ทุบตีของฉันที่ต้องตรวจสอบว่า EITHER ของ 2 ไฟล์ที่มีอยู่หากพวกเขาไม่อยู่มันควรจะสะท้อน รหัสฉันมี: if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then echo "match" fi แต่นี่ดูเหมือนจะไม่ทำงานด้วยเหตุผลบางอย่าง ฉันแน่ใจว่า 110% ว่าไม่มีไฟล์ 2 ไฟล์นี้ ฉันไม่ได้รับข้อผิดพลาดใด ๆ ifมันก็ไม่ได้ใส่ ฉันยังใหม่กับการเขียนสคริปต์ทุบตีดังนั้นฉันไม่แน่ใจว่าจะเกิดอะไรขึ้น

3
ใช้ `ln 'เพื่อสร้างไดเรกทอรีที่ขาดหายไป
ดังนั้นฉันจึงเขียนผู้จัดการแพ็คเกจเล็ก ๆ และปัญหาที่ฉันพบก็คือการสร้างลิงก์สัญลักษณ์ไปยังไฟล์ มันติดตั้งแพคเกจ/usr/pkg/name-versionและจากนั้นอ่านไฟล์เพื่อตรวจสอบการเชื่อมโยงสัญลักษณ์ที่จะทำ ฉันใช้lnเพื่อสร้างลิงก์และฉันพบปัญหาเมื่อพยายามติดตั้งส่วนหัว Linux API ฉันจำเป็นต้องเชื่อมโยงไฟล์ส่วนหัวด้วยตัวเองไม่ใช่โฟลเดอร์ที่มีพวกเขา (ดังนั้นหาก 2 แพ็คเกจจำเป็นต้องวางไฟล์ในไดเรกทอรีย่อยเดียวกันของไฟล์รวมพวกเขาสามารถทำได้โดยไม่ต้องขันหนึ่งแพ็คเกจขึ้นไป) ปัญหานั้นฉันแก้ไข แต่lnข้อผิดพลาดเพียงถ้าเส้นทางไม่สมบูรณ์ซึ่งน่ารำคาญเพราะไดเรกทอรีเหล่านั้นไม่ควรอยู่จนกว่าจะมีการติดตั้งแพคเกจ มีการตั้งค่าสถานะสำหรับlnที่จะสร้างไดเรกทอรีใด ๆ ที่ขาดหายไปหรือฉันจะต้องไปกับสคริปต์ทุบตีซับซ้อน

2
ไม่รวมไฟล์ใน bash loop
ในสคริปต์ต่อไปนี้ฉันจะแยกไดเรกทอรีในลูปได้อย่างไร ฉันต้องการทำเช่นนี้เพราะไฟล์ทั้งหมดเป็น symlink ที่ชี้ไปยังไดเรกทอรีที่มีอยู่ในระดับเดียวกันดังนั้นฉันไม่ต้องการเพิ่ม cd /var/www for dir in */ do base=$(basename "$dir") tar -czfh "${base}.tar.gz" "$dir" done
10 bash 


3
ปัญหาหลักที่คนย้ายจากทุบตีไป zsh ควรเผชิญคืออะไร?
สองสามครั้งที่ฉันมีปัญหาในการทุบตีที่คนอื่นใช้ zsh ไม่ได้และพวกเขาก็มองด้วยความดีใจว่าพวกเขาฉลาดแค่ไหน นอกจากนี้ฉันยังเห็นผู้ใช้ zsh ในหมู่คนที่ฉันชื่นชมและฉันได้ลองสองสามครั้งครึ่งใจที่จะย้ายไป zsh แต่ทุกครั้งที่กลับมาเพราะฉันไม่มีเวลา (และขี้เกียจ) เพื่อเรียนรู้การทำงานประจำใน zsh มีเครื่องมือสำหรับการโยกย้ายที่ใช้งานได้จริงหรือไม่? หรือมีบางสิ่งที่สำคัญที่คุณอยากจะแนะนำให้ฉันเรียนรู้เพื่อทำให้การเปลี่ยนแปลงง่ายขึ้นอย่างน้อยก็เพื่อที่ฉันจะได้ลองและดูว่ามันสร้างความแตกต่าง "สำหรับฉัน" หรือไม่? โดยวิธีการที่ฉันใช้จ่ายส่วนใหญ่ของชีวิตของฉันกับ mac, Ubuntu และ RedHat
10 bash  zsh 

2
การตั้งค่าตัวแปร readline ในเชลล์
ฉันอ่านในmanหน้าว่าคุณตั้งค่าพารามิเตอร์ readline เป็นปิดหรือค่าโดยใช้ set var value นี่เป็นสิ่งเดียวกันกับsetbuiltin และคุณจะตั้งค่าตัวแปรอย่างไรเมื่อinputrcอ่านแล้วและเชลล์กำลังทำงานอยู่?
10 bash  readline 

2
แถบสถานะหน้าจอเพื่อแสดงไดเร็กทอรีปัจจุบันสำหรับ zsh / bash เชลล์
ฉันใช้หน้าจอ GNU กับ zsh เป็นจำนวนมาก มันจะเป็นคุณสมบัติที่ดี (ฉันคิดว่า) เพื่อให้สามารถแสดงชื่อไดเรกทอรีปัจจุบัน (ไม่ใช่เส้นทางแบบเต็ม) เป็นชื่อแท็บ ฉันสามารถทำได้ด้วยCTRL+A SHIFT+Aแต่นั่นคือคู่มือ ฉันต้องการให้มันเปลี่ยนทุกครั้งที่ฉันเปลี่ยนไดเรกทอรี ไม่มีใครรู้วิธีการทำเช่นนี้? แก้ไข: คำตอบยังมีโซลูชันสำหรับทุบตี
10 bash  zsh  gnu-screen 

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