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

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

6
นำส่วน 'apt up' มาใช้ใหม่ของคำสั่ง 'apt update' และ `apt upgrade` เพื่อเรียกใช้ทั้งสองอย่างเป็นลำดับในหนึ่งบรรทัด
วิธีการนำapt upส่วนของคำสั่งapt updateและapt upgradeคำสั่งไปใช้ซ้ำเพื่อรันทั้งสองคำสั่งตามลำดับในหนึ่งบรรทัดโดยไม่มีนามแฝง apt up{date,grade}สิ่งที่ชอบ:

2
ไม่รวมไฟล์และไดเรกทอรีบางตัวเมื่อทำการลบไฟล์
dataไดเรกทอรีระดับบนสุดของฉันคือ dataมีหลายไดเรกทอรีและไดเรกทอรีเหล่านี้มีไดเรกทอรีย่อย ฉันต้องลบไฟล์และไดเรกทอรีdata/ทั้งหมดยกเว้นไฟล์หลายไฟล์ในบางไดเรกทอรี ตัวอย่างเช่นข้อมูลรวมถึงไดเรกทอรีและ100 101ผมแค่อยากจะให้a.txtและb.txtไฟล์ใน100/และc.txtและd.txtไฟล์ใน101/ขณะที่ลบไฟล์อื่น ๆ ทั้งหมดและไดเรกทอรีในและ100101 ตัวอย่าง: . ├── 100 │ ├── a.txt │ ├── b.txt │ ├── c.txt │ └── d.txt └── 101 ├── a.txt ├── b.txt ├── c.txt └── d.txt ฉันใช้rm -rf !(a.txt|b.txt)คำสั่ง แต่ฉันไม่สามารถใช้คำสั่งนี้สำหรับแต่ละไดเรกทอรีโดยอัตโนมัติ

4
วิธีหยุดสคริปต์ bash เมื่อเงื่อนไขล้มเหลว
ที่นี่มันแสดงให้เห็นถึงการใช้||และ&&ในบรรทัดเดียวเพื่อเชื่อมต่อการดำเนินการคำสั่ง: ฉันจะตรวจสอบข้อผิดพลาด apt-get ในสคริปต์ทุบตีได้อย่างไร ฉันกำลังพยายามหยุดการประมวลผลสคริปต์หากเงื่อนไขบางอย่างล้มเหลว เช่น false || echo "Obvious error because its false on left" && exit ที่นี่มันพิมพ์Obvious error because its false on the leftและออกจากคอนโซลซึ่งเป็นสิ่งที่ฉันต้องการ true || echo "This shouldn't print" && exit ที่นี่ไม่มีการพิมพ์เสียงสะท้อน แต่exitคำสั่งทำงานได้ดีเช่นคอนโซลถูกปิดไม่ควรexitคำสั่งไม่ทำงานเพราะคำสั่ง echo ทางด้านขวาไม่ได้ถูกดำเนินการ หรือโดยค่าเริ่มต้นข้อความที่ถือว่าเป็นเท็จทางด้านซ้ายของ&&ผู้ประกอบการ? แก้ไข: ฉันควรได้กล่าวถึงก่อนหน้านี้เป้าหมายของฉันคือการสะท้อนข้อผิดพลาดและออกหากไม่ชัดเจน wrt กรณีเฉพาะของฉันในการจับข้อผิดพลาดเมื่อจัดกลุ่มเงื่อนไขโดยใช้ && และ | |, @ bodhi.zazen คำตอบจะช่วยแก้ปัญหา …

2
การเปลี่ยนชื่อไดเรกทอรีจำนวนมากเพื่อย้ายปีตั้งแต่ต้นจนจบ
ฉันกำลังดิ้นรนกับโฟลเดอร์เพลงบางโฟลเดอร์ ฉันเคยตัดสินใจตั้งชื่อตามรูปแบบ: artist - album - year. วันนี้ฉันรู้ว่านี่ไม่ใช่การย้ายที่ฉลาดและตอนนี้ต้องการตั้งชื่อไดเรกทอรีของฉันตามรูปแบบ: year - artist - albumเนื่องจากพวกเขาจะปรากฏขึ้นตามลำดับจากน้อยไปมากเมื่อแสดงรายการ ฉันเริ่มทำการเปลี่ยนชื่อด้วยมือ แต่ด้วยโฟลเดอร์ประมาณ 700 โฟลเดอร์ต้องมีวิธีที่ง่ายกว่า ฉันพยายามใช้gprenameแต่ฉันไม่ค่อยเก่งเรื่อง regex และ bash scripting ... มีใครบ้างที่สามารถช่วยฉันสำรองปลายนิ้วมือที่ยากจนของฉันได้? ตัวอย่างบางส่วน: Aes Dana - Memory Shell - 2004 Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009 จะกลายเป็น 2004 - Aes Dana …

2
เทอร์มินัลเข้าสู่โหมดใดเมื่อฉันพิมพ์เครื่องหมายคำพูดเดี่ยว?
เมื่อฉันป้อนเครื่องหมายคำพูดเดี่ยว'ในเทอร์มินัลมันจะไปยังโหมดอื่นและคำสั่งจะไม่ทำงาน โหมดนี้คืออะไรและเมื่อไหร่ที่เราจะใช้มัน? root@sai:~# ' > ls > ' ls : command not found root@sai:~#

5
วิธีพิมพ์ค่าในไฟล์ข้อความไปยังไฟล์คอลัมน์โดยใช้เชลล์สคริปต์
ฉันมี output.txt จากการรันเชลล์สคริปต์ดังนี้: abc.txt errorstatus1 Fri Nov 11 02:00:09 2016 def.txt errorstatus2.txt Sat Nov 12 03:00:09 2016 ไฟล์ข้อความมีหลายรายการทีละบรรทัดในลักษณะเดียวกัน ฉันต้องการพิมพ์ค่าเหล่านี้ลงในคอลัมน์: ชื่อไฟล์, สถานะและการประทับเวลาดังนี้: Filename Status Timestamp abc.txt errorstatus1 Fri Nov 11 02:00:09 2016 def.txt errorstatus2 Sat Nov 12 03:00:09 2016

3
การกำหนดเฉพาะส่วนของสตริงให้กับตัวแปรใน bash
ฉันได้รับ filepath แบบสัมบูรณ์จากผู้ใช้และฉันต้องการสร้างตัวแปรที่จะเป็นสตริงที่จะไม่รวมเฉพาะสององค์ประกอบแรกของเส้นทางของไฟล์ แต่ไม่มีการพิมพ์หรืออะไรก็ตาม ตัวอย่างเช่นพา ธ สัมบูรณ์อาจเป็น: /home/myusername/folder1/folder2/folder3 และมันถูกบันทึกใน "target_path" และฉันต้องการให้ "mydir" เป็นเพียง: /folder1/folder2/folder3 ฉันลองใช้คำสั่ง cut ด้วยวิธีที่ต่างกัน แต่ไม่ประสบความสำเร็จ

2
มีคำสั่งใน Gnome-Terminal หรือเชลล์ tabbable ใด ๆ เพื่อเปิดแท็บใหม่หรือไม่?
ฉันไม่ได้มองหาแป้นพิมพ์ลัด แต่ฉันต้องการคำสั่ง: หน้าต่างใหม่ แท็บใหม่ ปิดแท็บหรือหน้าต่างปัจจุบัน ขยายหน้าต่างเชลล์ให้ใหญ่สุด ย่อขนาดหน้าต่างเชลล์ ย้ายเชลล์ไปยังพื้นที่ทำงานอื่น สลับแท็บ และโดยทั่วไปอะไรเช่นนี้ โปรดจำไว้ว่า; ฉันไม่ต้องการทางลัด แต่เป็นคำสั่งจริง เหตุผลของเรื่องนี้คือเพื่อให้ฉันสามารถใช้ฟังก์ชั่นนามแฝง

2
อะไรคือข้อแตกต่างระหว่าง ls [13] และ ls {1,3}
touch inv{1..3}.txtฉันสร้างสามไฟล์ในไดเรกทอรีของฉันโดยใช้คำสั่ง ตอนนี้ฉันใช้คำสั่งสองคำสั่งและเอาต์พุตของพวกเขาก็เหมือนกันมาก คำสั่งทั้งสองนั้นคือls inv[13].txtและls {1,3}.txt. แล้วสองคนนี้ต่างกันอย่างไร วงเล็บเหลี่ยมแตกต่างกันอย่างไรเมื่อเปรียบเทียบกับเครื่องมือจัดฟัน นอกจากนี้ฉันยังได้ค้นหาคำว่า "linux [.. ]" แต่ไม่พบอะไรเลยฉันจึงรู้ได้ว่าสิ่งเหล่านี้เรียกว่าอะไรในคำศัพท์ของ linux? ขอบคุณ

3
rm ทำงานบนบรรทัดรับคำสั่ง แต่ไม่อยู่ในสคริปต์
เมื่อฉันทำrm *.old.*ในบรรทัดคำสั่งจะลบอย่างถูกต้อง แต่เมื่อฉันทำในส่วนต่อไปของสคริปต์ของฉันมันไม่ได้ rm *.old.*ไฟล์ทั้งหมด มีอะไรผิดปกติในสคริปต์ทุบตีของฉัน: for i in ./*; do if [[ -f $i ]]; then if [[ $i == *.old.* ]]; then oldfile=$i echo "this file is to be removed: $oldfile" rm $oldfile exec 2>errorfile if [ -s $errorfile ] then echo "rm failed" else echo "removed $oldfile!" …
11 bash  scripts  rm 

2
เวลาประทับใน Exec = บรรทัดของไฟล์ .desktop เป็นไปได้หรือไม่
Lubuntu 16.04 - เซสชัน Openbox ฉันสามารถใช้เทอร์มินัลเพื่อเปิดไฟล์ที่มีการประทับเวลาด้วยgedit: gedit ~/$(date +%Y%m%d%H%M%S).txt คำสั่งยังสามารถใช้ผ่านแป้นพิมพ์ลัดใน Openbox <keybind key="W-4"> # gedit time-stamped file <action name="Execute"><command>sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt'</command></action> </keybind> แต่ฉันไม่สามารถทำเช่นเดียวกันผ่านทางExec=สายของ.desktopไฟล์ Exec=sh -c 'gedit ~/$(date +%Y%m%d%H%M%S).txt' เพียงสร้างไฟล์ที่เรียกว่า ~/.txt ดังนั้นฉันจะรับไฟล์ .desktop ทำสิ่งที่ฉันต้องการได้อย่างไร
11 bash  .desktop 

4
เชลล์ที่มีความสามารถในการแก้ไขดีขึ้น
Shells (อย่างน้อยสิ่งที่ฉันรู้) มีความสามารถในการแก้ไขคำสั่งไม่ดีจริงๆ ตัวอย่างเช่น: ฉันไม่สามารถชี้เคอร์เซอร์ไปที่จุดใด ๆ ของคำสั่ง ฉันไม่สามารถเลือกและถอยกลับ / ลบ / แทนที่ข้อความในคำสั่ง ขณะนี้สิ่งเหล่านี้เบี่ยงเบนความสนใจฉันใช้ gedit เพื่อแก้ไขคำสั่งก่อนวางลงในเทอร์มินัล มีวิธีแก้ปัญหาที่ดีสำหรับสิ่งเหล่านี้หรือไม่?

3
ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็นที่ไม่คาดคิด `('
เมื่อฉันใช้โค้ดด้านล่างในเทอร์มินัล Ubuntu มันใช้งานได้ดี: rm !(*.sh) -rf แต่ถ้าฉันวางโค้ดบรรทัดเดียวกันในเชลล์สคริปต์ (clean.sh) และรันเชลล์สคริปต์จากเทอร์มินัลมันจะพ่นข้อผิดพลาด: สคริปต์ clean.sh: #!/bin/bash rm !(*.sh) -rf ข้อผิดพลาดที่ฉันได้รับ: ./clean.sh: line 2: syntax error near unexpected token `(' ./clean.sh: line 2: `rm !(*.sh) -rf' คุณช่วยได้ไหม

2
จะหยุดและถอดที่เก็บของได้อย่างไร?
ฉันกำลังพยายามลบนักเทียบท่า / รูปภาพ / คอนเทนเนอร์และทุกอย่างที่เชื่อมต่อกับนักเทียบท่า แต่ก่อนอื่นฉันต้องหยุดมัน ในขณะที่ฉันพยายามรันคำสั่งนี้: docker stop $(docker ps -a -q) มันทำให้ฉันมีข้อผิดพลาด: [:/home/imran] 1 $ docker stop $(docker ps -a -q) 2015/01/16 00:37:38 Get http:///var/run/docker.sock/v1.14/containers/json?all=1: dial unix /var/run/docker.sock: permission denied Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] Stop a running container by sending SIGTERM and then SIGKILL after a …

4
tr: แปลง apostrophe เป็น ASCII
ฉันพยายามที่จะแปลงขวาคำพูดขีดเดียวกับผู้Apostrophetrใช้ tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b กำหนดไฟล์ที่เข้ารหัส UTF-8 ชื่อaซึ่งมีตัวอย่างนี้: We’re not a different species “All alone?” Jeth mentioned. OS X ใช้ BSD trและสร้างผลลัพธ์ที่ดี: We're not a different species “All alone?” Jeth mentioned. Ubuntu ใช้ GNU trและสร้างผลลัพธ์ที่น่ารังเกียจนี้: We'''re not a different species ''<9C>All alone?''<9D> Jeth …
11 bash  unicode  utf-8 

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