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

Bash (Bourne-Again SHell) เป็นเชลล์ที่ใช้ในอินเตอร์เฟสบรรทัดคำสั่งของ Ubuntu ตามค่าเริ่มต้น

4
ความแตกต่างระหว่าง let, expr และ $ []
ฉันต้องการรู้ว่าอะไรคือความแตกต่างระหว่าง a=$[1+1] a=$((1+1)) let a=1+1 a=$(expr 1 + 1 ) 4 ทั้งหมดกำหนดตัวแปร a ด้วย 2 แต่ความแตกต่างคืออะไร จากสิ่งที่ฉันค้นพบจนถึงตอนนี้ก็คือ expr นั้นช้ากว่าเพราะมันไม่ใช่กระสุนจริงในตัว แต่ไม่มากกว่านั้น
23 bash 

3
ฉันจะ glob สำหรับไฟล์ที่ซ่อนอยู่ทั้งหมดได้อย่างไร
ฉันต้องการที่จะดำเนินการบางอย่าง (พูดchown) ในทุกไฟล์ที่ซ่อนอยู่ในไดเรกทอรี ฉันรู้ว่านี้.*คือไม่ได้ความคิดที่ดีเพราะมันยังจะได้พบในปัจจุบัน.และผู้ปกครอง..ไดเรกทอรี (ฉันรู้ว่าrmจะล้มเหลวในการทำงานบน.และ..แต่คำสั่งอื่น ๆ รวมทั้งchownและchmodอย่างมีความสุขจะมีผล) แต่ไฟล์ที่ซ่อนของฉันทั้งหมดมีชื่อแตกต่างกัน! ฉันควร glob สำหรับไฟล์ที่ซ่อนอยู่ทั้งหมดในขณะที่ไม่รวม.และ..?

5
ฉันจะรวมไฟล์เป็นรายบรรทัดได้อย่างไร
cat file1 foo ice two cat file2 bar cream hundred ผลลัพธ์ที่ต้องการ: foobar icecream twohundred file1 และ file2 จะมีจำนวนบรรทัดเท่ากันเสมอในสถานการณ์ของฉันในกรณีที่ทำให้สิ่งต่าง ๆ ง่ายขึ้น

3
คำสั่ง uniq ทำงานไม่ถูกต้องหรือไม่
ดังนั้นฉันจะตรวจสอบmd5แฮชของไฟล์ของฉันด้วยสิ่งนี้เป็นผลลัพธ์ของฉัน: 657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt 657cf4512a77bf47c39a0482be8e41e0 ./dupes.txt 8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt 15f63928b8a1d5337137c38b5d66eed3 ./foo.txt 8d60a927ce0f411ec94ac26a4785f749 ./derp.txt อย่างไรก็ตามหลังจากวิ่งfind . -type f -exec md5sum '{}' ';' | uniq -w 33ไปหาแฮชที่เป็นเอกลักษณ์ฉันได้รับสิ่งนี้: 657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt 8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt 15f63928b8a1d5337137c38b5d66eed3 ./foo.txt 8d60a927ce0f411ec94ac26a4785f749 ./derp.txt จากความเข้าใจของฉันมีเพียงหนึ่งอย่างใดอย่างหนึ่งderpina.txtหรือderp.txtควรจะปรากฏขึ้นเนื่องจากแฮชของพวกเขาเหมือนกัน ฉันพลาดอะไรไปรึเปล่า? ใครสามารถบอกฉันได้ว่าทำไมมันถึงออกมาเป็นแบบนี้?

5
ฉันจะรันคำสั่งดั้งเดิมที่ใช้นามแฝงด้วยชื่อเดียวกันได้อย่างไร
นามแฝงสำหรับlsคำสั่งใน~/.bashrcไฟล์ชื่อแทนด้วยอันนี้: alias ls='ls --color=auto' จากนั้นเมื่อฉันเรียกใช้lsคำสั่งใน terminal aliased ls( ls --color=auto) จะทำงาน แต่คำถามของฉันคือฉันจะเรียกใช้ต้นฉบับlsเพียงlsอย่างเดียวเท่านั้นโดยไม่มีอาร์กิวเมนต์เพิ่มเติมและไม่แก้ปัญหาด้วยการลบรายการที่มีชื่อแทนได้อย่างไร lsตั้งแต่เมื่อฉันลบรายการนี้ฉันสามารถทำงานในที่เรียบง่าย

5
วิธีการแทนที่สตริงในบรรทัดที่ 5 ของไฟล์ข้อความหลายไฟล์?
ฉันต้องการแทนที่บรรทัดที่ 5 ของไฟล์ข้อความหลายไฟล์ ( file1.txt, file2.txt, file3.txt, file4.txt ) ด้วยสตริง "Good Morning" โดยใช้คำสั่งเทอร์มินัลเดียว ~/Desktopทุกไฟล์ข้อความที่มีอยู่ของฉัน หมายเหตุ: เดสก์ท็อปของฉันประกอบด้วยไฟล์. txt 6 ไฟล์ฉันต้องการใช้การเปลี่ยนแปลงกับไฟล์ข้อความ 4 ตัวที่กล่าวถึงข้างต้นเท่านั้น

2
ความแตกต่างระหว่างไฟล์ grep apple และไฟล์ grep“ apple” คืออะไร?
ความแตกต่างระหว่างgrep apple fileและgrep "apple" fileคืออะไร? การใส่เครื่องหมายคำพูดทำอะไร? ทั้งคู่ดูเหมือนจะทำงานและทำสิ่งเดียวกัน (แสดงบรรทัดเดียวกัน)
22 bash  grep  sh 

6
ฉันจะเปิดไฟล์จากภายในสคริปต์ทุบตีได้อย่างไร
ตกลงทำงานgedit myfile.txtได้ดี แต่สิ่งที่เกี่ยวกับการเปิดไฟล์จากภายในสคริปต์ทุบตีโดยใช้แอปเดสก์ทอปเริ่มต้นที่เชื่อมโยงกับประเภทไฟล์? ฉันพยายามด้านล่างซึ่งใช้งานได้ดีเมื่อทำงานด้วยตนเองในเทอร์มินัล แต่เมื่อฉันวางไว้ในไฟล์ทุบตีไม่มีอะไรเกิดขึ้น: #!/bin/bash xdg-open "myfile.txt"& ฉันควรทำอย่างไรดี โปรดทราบว่าฉันต้องการไฟล์ที่จะเปิดอยู่หลังจากเทอร์มินัลปิดเช่นกัน
22 bash  xdg-open 

3
การใช้ grep กับ pipe และ ampersand เพื่อกรองข้อผิดพลาดจาก find
ฉันใช้ cygwin เพื่อค้นหาไฟล์ใน cygdrive อย่างไรก็ตามฉันต้องระงับการอนุญาตข้อความปฏิเสธ (มิฉะนั้นผลลัพธ์ที่ซ่อนอยู่ในข้อความข้อผิดพลาด) คำสั่งดังต่อไปนี้ใช้งานได้: find -name 'myfile.*' |& grep -v "Permission denied" ฉันไม่เข้าใจว่าทำไมเครื่องหมายแอมเปอร์แซนด์จึงต้องใส่ลงในคำสั่งนี้คาดว่าจะใช้งานได้ แต่ก็ไม่ได้ find -name 'myfile.*' | grep -v "Permission denied" กรุณาอธิบายความหมายของเครื่องหมายและ
22 bash  command-line  find  grep 

5
แสดงผลซ้ำเพื่อแบ่งปัน. bashrc ในเครื่องด้วย Dropbox หรือไม่
ฉันทำงานกับเครื่องที่แตกต่างกันมากทุกตัวที่ใช้ Ubuntu (ไม่ได้เป็นเวอร์ชั่นเดียวกันเสมอ) ฉันมีการปรับแต่งพื้นฐานบางอย่างให้กับพรอมต์ของฉันฉันต้องการให้มีในเครื่องทั้งหมด ขณะนี้ฉันใช้ Dropbox และเก็บ "dot files" อื่น ๆ ทั้งหมดของฉันไว้ที่นั่นเช่น. vim / .vimrc .gitconfig .ackrc ฉันเพียงแค่เชื่อมโยงพวกเขาไปยังโฟลเดอร์บ้านของฉันจากโฟลเดอร์ Dropbox ของฉัน ตอนนี้เครื่องทั้งหมดที่อยู่ในการซิงค์ ฉันไม่แน่ใจว่าผลสะท้อนของการทำอะไรแบบนี้กับ bashrc ของฉันคืออะไร มีใครเสนอคำแนะนำได้ไหม อาจเป็นวิธีง่ายๆในการโหลดไฟล์แยกต่างหากใน bashrc?
22 bash  dropbox 

3
ฉันจะเลือกฟิลด์ / คอลัมน์จากผลลัพธ์ของ `ls -l` ได้อย่างไร
เป้าหมายของฉันเรียบง่ายหลอกลวง (อย่างน้อยสำหรับฉัน) ฉันต้องการเอาท์พุทของls -lหรือls -lhและเลือกเพียงหนึ่งฟิลด์ ฉันกำลังมองหาสิ่งนี้ว่ากันกระสุนได้มากที่สุดโดยที่ฉันหมายความว่าสมมติว่าชื่อไฟล์สามารถมีจำนวนช่องว่างที่แปรผันไม่ใช่ทุกอย่างในสนามที่มีความยาวเท่ากันเป็นต้น คะแนนโบนัสสำหรับการมีสคริปต์ที่จะใช้ชื่อของฟิลด์ (หรือแม้แต่เพียงหมายเลขฟิลด์) จากนั้นส่งคืนเนื้อหาของฟิลด์ ฉันอยากจะเลี้ยว เป็น:

7
เขียนทับเอาต์พุตก่อนหน้าใน Bash แทนการต่อท้าย
สำหรับตัวจับเวลาทุบตีฉันใช้รหัสนี้: #!/bin/bash sek=60 echo "60 Seconds Wait!" echo -n "One Moment please " while [ $sek -ge 1 ] do echo -n "$sek " sleep 1 sek=$[$sek-1] done echo echo "ready!" นั่นทำให้ฉันเป็นอย่างนั้น One Moment please: 60 59 58 57 56 55 ... มีความเป็นไปได้ที่จะแทนที่ค่าสุดท้ายของวินาทีโดยล่าสุดเพื่อให้ผลลัพธ์ไม่สร้างเส้นทางขนาดใหญ่ แต่นับถอยหลังวินาทีเหมือนเวลาจริงในตำแหน่งเดียวหรือไม่ (หวังว่าคุณจะเข้าใจสิ่งที่ฉันหมายถึง :))

3
ฉันจะเรียกใช้ OpenVPN เป็น root ในพื้นหลังในสคริปต์ได้อย่างไร
ผมอยากจะเขียนสคริปต์ที่เรียกแรกตามด้วยopenvpn sshเมื่อพิมพ์คำสั่ง sudo openvpn ~/my_connection.ovpn ใน command prompt ฉันได้รับผลลัพธ์ต่อไปนี้: ... Wed Jan 4 21:04:35 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 Wed Jan 4 21:04:35 2017 /sbin/ip link set dev tun0 up mtu 1500 Wed Jan 4 21:04:35 2017 /sbin/ip addr add dev tun0 local IP_FOO peer IP_FOO Wed Jan 4 21:04:35 2017 …

3
เขียนเอาต์พุตของคำสั่งต่อเนื่องหลายคำไปยังไฟล์ข้อความ
ฉันลองตรวจสอบ Firefox ล่าสุดและต้องการแฮชทั้งหมดในไฟล์ TXT หนึ่งไฟล์ สิ่งที่ฉันพยายามทำคือ: sha1sum firefox.tar.gz > sha.txt และฉันก็ลอง: md5sum firefox.tar.gz > sha.txt | sha1sum firefox.tar.gz > sha.txt | sha512sum firefox.tar.gz > sha.txt แต่เฉพาะในกรณีนี้เท่านั้นที่จะพิมพ์ sha512 ไปยัง sha.txt ผมทำอะไรผิดหรือเปล่า? มีคนช่วยฉันด้วยได้มั้ย

1
ตัวแปรสภาวะแวดล้อมไม่สามารถเข้าถึงได้ในสคริปต์ทุบตี
ฉันพบปัญหาแปลก ๆ ฉันใส่ตัวแปร env ลงไป.bashrcและทำงานได้ตามที่ควร: echo $HADOOP_HOME /home/me/dist/hadoop แต่ตัวแปร env ไม่สามารถเข้าถึงได้เมื่อเรียกใช้งานสคริปต์ bash สมมติว่าฉันสร้าง/tmp/sample.shด้วยเนื้อหาด้านล่าง: #! /bin/bash echo $HADOOP_HOME เมื่อฉันเรียกใช้สคริปต์ข้างต้นก้องบรรทัดว่างเปล่า: /tmp/sample.sh ‌

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