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

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

1
ฉันจะทำให้บริสุทธิ์หรือหนีจากเส้นทางที่ถูกส่งกลับโดย realpath หรือ readlink ได้อย่างไร?
realpathและreadlinkส่งคืนพา ธ สัมบูรณ์: +akiva@X230:~$ realpath ZannaIsAwesome /home/akiva/ZannaIsAwesome เส้นทางแบบนี้จัดการได้ง่าย อย่างไรก็ตามสิ่งนี้จะมีปัญหาบางอย่าง: ตัวอย่างเช่น: ดังนั้นชื่อเช่นนี้จำเป็นต้องได้รับการฆ่าเชื้อเพื่อให้สามารถป้อนไปยังคำสั่งอื่น ๆ usecase อาจเป็นดังนี้: +a@X230:~/\e[92mM@r|< $hu+'|'|_e|\|\|0rth [`-_-"]$ bacon=$(realpath pullingATerdon) +a@X230:~$ vim $bacon จำเป็นต้องพูดvim $baconจะไม่ทำงานตามที่คาดไว้ ฉันจะทำอย่างไรในการทำให้บริสุทธิ์เส้นทางที่แน่นอนดังนั้นมันจะทำงานร่วมกับคำสั่งอื่น ๆ ?

3
ฉันควรอัพเดต Ubuntu บน WSL หรือไม่
ฉันมี Bash บน Ubuntu บน Windows ผลลัพธ์ของlsb_release -aคือต่อไปนี้ No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty ฉันควรอัพเกรด ฉันมีความเสี่ยงที่จะทำลายหรือไม่

1
รับข้อความ `404 :: ไม่พบคำสั่ง 'เปิดเทอร์มินัลทุกครั้ง
ฉันเพิ่งรู้ว่าฉันได้รับข้อความ404:: command not foundทุกครั้งที่ฉันเปิดเครื่อง ฉันจำไม่ได้ว่าติดตั้งอะไรไว้ก่อนได้รับข้อความนี้: ฉันไม่พบไฟล์ดังกล่าวในไฟล์เริ่มต้นของ bash: $ grep 404 -H ~/.bashrc ~/.profile ~/.bash_profile ~/.bash.login \ ~/.bash_aliases /etc/bash.bashrc /etc/profile \ /etc/profile.d/* /etc/environment 2> /dev/null $ ฉันยังวิ่งPS4='${BASH_SOURCE}:${LINENO} ' bash -lxeแล้วคุณจะพบการส่งออกเต็มสามารถพบได้ที่นี่


4
คัดลอก / ย้ายหลายไฟล์โดยใช้ cp / mv โดยไม่ใช้นิพจน์ทั่วไป
สมมติว่าฉันมีโฟลเดอร์ที่มีไฟล์บางไฟล์และบางโฟลเดอร์ (ไฟล์ประเภทใดก็ได้) และฉันต้องการย้าย / คัดลอกไฟล์และโฟลเดอร์เหล่านั้นโดยใช้mv/ cpcommand มีวิธีใดบ้างที่ฉันสามารถเลือกบางอย่างแบบสุ่มเช่นเดียวกับที่เราเลือกโดยใช้ปุ่ม Ctrl และย้าย / คัดลอกโดยใช้เทอร์มินัล ฉันไม่สามารถใช้สัญลักษณ์แทนหรือนิพจน์ทั่วไปได้เนื่องจากฉันต้องการเลือกไฟล์ประเภทต่าง ๆ และชื่อของมันมีความคล้ายคลึงกันเล็กน้อย
9 command-line  bash  cp  mv 

4
วิธีการตรวจสอบจำนวนขั้วที่เปิดโดยผู้ใช้
ฉันใช้ Ubuntu และสามารถเปลี่ยนbashสีของshell prompt เป็นสีเขียวได้ด้วยตนเอง export PS1="\e[0;32m[\u@\h \W]\$ \e[m" อย่างไรก็ตามฉันต้องการให้เชลล์พรอมต์สีเปลี่ยนโดยอัตโนมัติทุกครั้งที่ฉันเปิดเทอร์มินัลหรือแท็บใหม่ ฉันทราบว่า Tty พื้นฐานระยะเวลามี 16 สีและมันก็โอเคที่จะหมุนสีถ้ามากกว่า 16 ขั้วเปิด จะแก้ปัญหายังทำงานเมื่อฉันเชื่อมต่อผ่านPutty, หรือtmuxscreen ความคิดของฉันคือการเขียนสคริปต์เปลือกและวางไว้ใน.bashrcที่ตรวจจับขั้วเซสชั่นใหม่ที่ผู้ใช้มีการเปิดและเพิ่มเคาน์เตอร์ระดับโลกจากการ\e[0;31m[ \e[0;47m[วิธีการตรวจสอบจำนวนขั้วที่เปิดโดยผู้ใช้?

5
รับองค์ประกอบหนึ่งของสตริงพา ธ โดยใช้ bash
ฉันมีไฟล์ ASCII ที่มีไฟล์พา ธ ที่ฉันอ่านโดยใช้: while read p; do echo $p; done < filelist.txt ไฟล์มี filepaths ที่มีรูปแบบต่อไปนี้: ./first/example1/path ./second/example1/path ./third/example2/path ฉันจะรับส่วนเฉพาะของสตริงพา ธ (จาก/ไปยัง/) ได้เช่นฉันต้องได้รับผลลัพธ์ที่พิมพ์: first second third และนอกจากนี้ยังมี example1 example1 example2 ฉันแน่ใจว่ามีวิธีการทำเช่นนี้โดยใช้การแสดงออกปกติและsedแต่ฉันไม่คุ้นเคยกับมัน

2
การอนุญาตถูกปฏิเสธเมื่อเรียกใช้ไฟล์ sh
ฉันพยายามใช้ไฟล์ sh เพื่อเริ่มต้นหน้าจอกับคอนโซลเซิร์ฟเวอร์ minecraft ของฉันได้อย่างง่ายดาย ฉันตั้งชื่อไฟล์นี้ว่า mc.sh ฉันมีไฟล์ sh อื่นในไดเรกทอรีเดียวกันกับ mc.sh ที่ทำงานได้ดี นี่คือสิ่งที่อยู่ใน mc.sh: screen -S minecraft java -Xms1024M -Xmx1024M -jar spigot.jar nogui นี่คือสิ่งที่อยู่ในไฟล์ sh อื่น ๆ : #!/bin/sh java -Xms512M -Xmx1024M -XX:MaxPermSize=128M -jar spigot.jar -bash: ./mc.sh: Permission deniedเกิดข้อผิดพลาดที่ฉันได้รับคือ การอนุญาตสำหรับmc.shคือ-rw-rw-r-- 1

2
วิธีรับ [TAB] เพื่อทำงานกับอาร์กิวเมนต์ของ alias เพื่อเติมข้อความอัตโนมัติสามารถทำได้ด้วยคำสั่งจริง
ฉันมีนามแฝงจำนวนมากที่ฉันสร้างใน.bash_aliasesไฟล์ของฉันและพวกเขามีประโยชน์มากดังนั้นหากฉันต้องการข้อมูลทั้งหมดในแพ็คเกจฉันทำสิ่งที่ชอบ: allinfo software-center และนั่นเทียบเท่า: apt-cache show software-center เป็นนามแฝงตั้งเป็น: alias allinfo='apt-cache show' แต่มีข้อเสียอย่างหนึ่งคือตอนนี้ฉันไม่สามารถเติมข้อความอัตโนมัติได้ TABเมื่อใช้allinfoแทนคำสั่งจริง ดังนั้นฉันจึงสงสัยว่ามีวิธีใดที่จะเอาชนะข้อเสียนี้และทำให้มันallinfo software-ce[TAB]ทำงานได้เหมือนที่คุณทำเมื่อใช้กับคำสั่งจริงไม่ใช่แค่สร้างพื้นที่แท็บขนาดใหญ่? ฉันใช้ gnome-terminalฉันใช้ ข้อมูลระบบปฏิบัติการ: No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 15.04 Release: 15.04 Codename: vivid ข้อมูลแพ็คเกจ: gnome-terminal: Installed: 3.14.2-0ubuntu3 Candidate: 3.14.2-0ubuntu3 Version table: *** 3.14.2-0ubuntu3 0 500 http://gb.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages 100 …

7
หนึ่งซับ ffmpeg (หรืออื่น ๆ ) เพื่อให้ได้ความละเอียดเท่านั้น?
ฉันไม่ค่อยเชี่ยวชาญในบรรทัดคำสั่งดังนั้นหวังว่านี่จะไม่โง่เกินไปสำหรับคำถาม ถ้าฉันวิ่ง: ffmpeg -i videofile.avi ฉันได้รับผลลัพธ์เช่นนี้ ffmpeg version git-2013-11-21-6a7980e Copyright (c) 2000-2013 the FFmpeg develop ers built on Nov 21 2013 12:06:32 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5) configuration: --prefix=/home/user/ffmpeg_build --extra-cflags=-I/home/user/ffmpeg_build/include --extra-ldflags=-L/home/user/ffmpeg_build/lib --b indir=/home/user/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable -libfdk- aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-l ibx264 --enable- nonfree libavutil 52. 53.100 / …
9 bash  ffmpeg  regex  pipe 

2
การเปลี่ยนทิศทางเอาต์พุตไปยังตัวแปรหรือไม่?
ฉันสนใจในการควบคุมผลลัพธ์จากสองคำสั่งไปยังตัวแปร ฉันไม่ต้องการให้แสดงผลบนหน้าจอ แต่มอบหมายให้กับตัวแปรภายในสคริปต์ของฉันเพื่อให้ฉันสามารถใช้มันได้อีกครั้ง สิ่งที่ฉันทำคือการรับขนาดไฟล์จากไดเรกทอรีโดยใช้คำสั่งด้านล่าง: ls -l /var/spool | wc -c คำสั่งนี้ทำให้ฉันมีขนาดไฟล์เป็นไบต์และแสดงผลลัพธ์เป็นจำนวนเต็ม ฉันสนใจที่จะรับจำนวนเต็มนี้ที่กำหนดให้กับตัวแปรที่ฉันชอบเพื่อที่ฉันจะสามารถเปรียบเทียบกับตัวแปรอื่นได้ในภายหลัง ดูเหมือนจะใช้งานไม่ได้: size = ls -l /var/spool | wc -c การเปลี่ยนเส้นทางจะทำงานได้หรือไม่ แบบนี้.... ls -l /var/spool | wc -c > size ฉันต้องการให้เอาต์พุตตัวเลขนี้ถูกกำหนดให้กับตัวแปรและไม่แสดงบนหน้าจอ ข้อเสนอแนะใด ๆ ยินดีมาก!

4
การใช้นามแฝงเริ่มต้น“ แจ้งเตือน”
Alert alias ดีฟอลต์ใช้สำหรับคำสั่ง notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')" การดำเนินการalertให้การแจ้งเตือนด้วยข้อความแจ้งเตือนและไอคอนสถานี ดำเนินการด้วยหนึ่งพารามิเตอร์เช่นalert !!!!!ให้การแจ้งเตือนด้วยข้อความแจ้งเตือน !!!!! และ!!!!! . ดังนั้นสิ่งที่แตกต่างระหว่างที่เรียบง่ายnotify-sendและสั่งนี้นามแฝง complexed ซึ่งใช้แจ้ง-ส่งก้องประวัติศาสตร์และหาง sed ? นามแฝงนี้มีประโยชน์ในสถานการณ์ใดบ้างหรือเป็นเพียงสร้างขึ้นมาเพื่อเล่น (สิ่งที่ชอบใช้ sudo sudo sudo sudo sudo apt-get install ฉันใช้ Ubuntu 12.10

1
ตัวแปรเส้นทางได้รับการรีเซ็ตเสมอ จะแก้ไขได้อย่างไร?
เมื่อไม่นานมานี้ฉันพบว่าฉันสามารถสร้างคำสั่งที่กำหนดเองพร้อมกับขยายตัวแปรเส้นทาง น่าเสียดายที่มันได้รับการตั้งค่าใหม่เสมอเมื่อฉันปิดเครื่องและเปิดอีกครั้ง คุณรู้วิธีแก้ไขปัญหานี้หรือไม่? เพราะเมื่อฉันต้องการเริ่มต้นสคริปต์บางคำสั่งด้วยคำสั่งเทอร์มินัลฉันไม่ต้องการขยายตัวแปร PATH ทุกครั้งก่อน ...

3
ฉันจะทำให้เส้นทางปัจจุบันของ bash prompt สั้นลงเหลือหนึ่งตัวอักษรต่อไดเรกทอรีได้อย่างไร
ฉันจำไม่ได้ว่าที่ไหน แต่ฉันเห็นเส้นทางปัจจุบันของ bash prompt สั้นลงในวิธีที่น่าสนใจ: ทุกไดเรกทอรีที่อยู่ในเส้นทาง (ยกเว้นอันสุดท้าย) จะถูกแทนที่ด้วยอักษรตัวแรกเท่านั้น ยกตัวอย่างเช่น: จะลงไปpath/to/some/directoryp/t/s/directory ฉันจะสร้างพฤติกรรมดังกล่าวได้อย่างไร

4
โปรไฟล์ bash ใช้ได้กับผู้ใช้ แต่ไม่ใช่ sudo
ฉันได้แก้ไข. profile เพื่อรวมโฟลเดอร์หากเสียบแฟลชไดรฟ์ไว้เมื่อเรียกใช้คำสั่งในฐานะผู้ใช้มันใช้งานได้ดี แต่บอกฉันว่า scrip ต้องทำงานโดย sudo (นี่คือสิ่งที่ฉันต้องการ) อย่างไรก็ตามเมื่อฉันพยายามที่จะเรียกใช้ด้วย sudo ฉันได้รับ "คำสั่งไม่พบ" ฉันมี symlink (แฟลช) ในโฟลเดอร์ / var / www ของฉันชี้ไปที่ / media / flash drive (ไม่ต้องสนใจการตั้งค่านี้เนื่องจากเป็นเพียงสำหรับ dev) นี่คือ. โปรไฟล์ผู้ใช้ของฉัน: # set PATH so it includes flash scripts if [ -d "/var/www/flash/scripts" ] ; then PATH="/var/www/flash/scripts:$PATH" fi เมื่อพยายามที่จะทำงานเป็น sudo ฉันได้รับ: …
9 bash 

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