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

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

3
เหตุใดจึงไม่ใช้สองคำสั่ง cd ในสคริปต์ทุบตีรันคำสั่งที่สอง
ฉันได้เขียนสคริปต์ทุบตีซึ่งสร้างชุดของไดเรกทอรีและโคลนโครงการไปยังไดเรกทอรีที่เลือก เพื่อที่ฉันจะต้องcdแต่ละไดเรกทอรี ( project 1และproject 2) แต่สคริปต์ไม่ได้cdไปที่ไดเรกทอรีที่สองหรือรันคำสั่ง แต่จะหยุดหลังจากcdและโคลนในproject2ไดเรกทอรี ทำไมมันไม่เรียกcd_project1ฟังก์ชันในรหัสต่อไปนี้ #!/bin/bash #Get the current user name function my_user_name() { current_user=$USER echo " Current user is $current_user" } #Creating useful directories function create_useful_directories() { if [[ ! -d "$scratch" ]]; then echo "creating relevant directory" mkdir -p /home/"$current_user"/Downloads/scratch/"$current_user"/project1/project2 else echo "scratch directory …

3
ฉันจะใช้ $ * ขณะที่ละเว้นตัวแปรอินพุตบางอย่างเช่น $ 1 และ $ 2 ในสคริปต์ทุบตีได้อย่างไร
ตัวอย่างเช่น, elif [[ $append = $1 ]] then touch ~/directory/"$2".txt echo "$variable_in_question" >> ~/directory/"$2".txt หากต้องการสร้างไฟล์ข้อความที่มีการป้อนข้อมูลต่อไปนี้ทั้งหมด"$2"หรือต่อท้ายไฟล์ข้อความที่มีอยู่พร้อมกับการป้อนข้อมูลทั้งหมดต่อไปนี้"$2"ฉันจะใช้อะไรแทน"$variable_in_question"บรรทัดที่ 4 ฉันเป็นพื้นต้องการ"$*"แต่ถนัดและ"$1""$2"

3
ฉันควรใส่สคริปต์ทุบตีของฉันที่ไหน
ฉันมีสคริปต์ทุบตีง่าย ๆ สองสามข้อที่ฉันพายด้วยกันสำหรับสิ่งที่ฉันทำอย่างสม่ำเสมอ หนึ่งในนั้นคือเรียกใช้ความซ้ำซ้อนเพื่อทำงานสำรองของฉัน ไม่มีอะไรที่ฉลาดเพียงแค่ .. ถ้าอย่างนั้นงบจริง ๆ เช่นนี้จะต้องทำงานเป็น sudo มันเป็นวิธีที่ดีที่สุดที่จะวางสคริปต์ของฉันใน / usr / bin (หรือสถานที่อื่น ๆ ในเส้นทาง) chown เพื่อ root.root และ chmod ถึง 700?
15 bash  scripts  sudo 

1
อินพุตเทอร์มินัลไม่ห่ออย่างถูกต้องหรือเลย
ในขณะนี้ฉันมีปัญหานี้ถาวรบนเทอร์มินัลทั้งหมดของฉันจากค่าเริ่มต้น gnome และ tilda ซึ่งฉันทั้งสองใช้กับสิ่งที่ฉันเพิ่งให้การหมุนวนอย่างรวดเร็วซึ่งอินพุตของฉันจะเขียนทับจุดเริ่มต้นของสายเมื่อมันควร ตัดและตัดเฉพาะบรรทัดถัดไป การกด Ctrl-A เพื่อกลับไปที่จุดเริ่มต้นของบรรทัดจะคืนค่าให้ฉันที่ใดที่หนึ่งในบรรทัดแทนอินพุตบรรทัดแรกของฉัน เนื่องจากนี่เป็นคำอธิบายที่ไม่ดีและมองเห็นได้ยากนี่คือลักษณะที่ปรากฏ: ไม่มีใครรู้ว่านี่คืออะไร? มันไม่ได้เกิดขึ้นภายใต้สถานการณ์บางอย่างเท่านั้นมันเป็นสิ่งถาวรที่มักจะมีตั้งแต่เริ่มต้นจนสิ้นสุดของทุกเซสชันในทุกเทอร์มินัลอีมูเลเตอร์ ผลลัพธ์ของprintf "%s\n" "$PS1" "$COLUMNS": leod:~$ printf "%s\n" "$PS1" "$COLUMNS" \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 80 ผลลัพธ์ของstty -a: leod:~$ stty -a speed 38400 baud; rows 11; columns 140; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = …

4
เหตุใดการหารในการคำนวณทางคณิตศาสตร์จึงคำนวณเปอร์เซ็นต์ส่วนใหญ่เป็น 0
การพยายามใช้ bash arithemetic สำหรับสคริปต์ แต่$eไม่ได้อัปเดตจนกว่าจะสิ้นสุด เอาท์พุทพูดสำหรับตัวเอง max=5 for e in $(seq 1 1 $max); do percent=$(( $e/$max*100 )) echo "echo $e / $max : = $percent" done Tl; DR: แสดง 1..5 เป็นเปอร์เซ็นต์ ผลผลิต: echo 1 / 5 : = 0 echo 2 / 5 : = 0 echo 3 / …

1
ไม่สามารถดักจับเอาต์พุตเป็นตัวแปรใน Bash
redis-cliมีปัญหากับ ฉันต้องการตรวจสอบว่าการเชื่อมต่อกับredisถูกปฏิเสธ (เซิร์ฟเวอร์ดาวน์) ผ่าน BASH หรือไม่ ทดสอบอย่างง่าย #!/bin/bash test=$(redis-cli exit) #exit out of the "not connected console" if [[ -z $test ]] ; then echo "I'm empty :(" fi ฉันคาดว่าCould not connect to Redis at 127.0.0.1:6379: Connection refusedจะถูกเก็บไว้ในการทดสอบ $ แต่ข้อความนี้จะถูกส่งออกไปยังคอนโซลแทน ฉันไม่แน่ใจว่าเกิดอะไรขึ้น ใครมีความคิดเห็นบ้าง (Ubuntu 14.04.1)

1
คำสั่ง“ printf” นี้ทำอะไร?
ฉันกำลังจะไปกวดวิชาและที่นั่นฉันเจอคำสั่ง: printf "%(%s)T" ผลลัพธ์ของคำสั่งนี้คือ: 1454299615 ใครช่วยกรุณาบอกฉันว่าคำสั่งนี้คืออะไรและสิ่งที่ส่งออกหมายถึงอะไร

2
อาร์กิวเมนต์ที่หายไปของ -exec คืออะไร
ฉันใช้คำสั่งต่อไปนี้เพื่อล้างไดเรกทอรีของไฟล์และไดเรกทอรีที่มีอายุมากกว่า 30 วันและย้ายไปยังไดเรกทอรีเก็บถาวรซึ่งฉันสามารถลบได้หลังจากสองสามสัปดาห์หากไม่มีใครขอไฟล์คืน ไดเรกทอรีเป้าหมายมีไดเรกทอรีย่อยตามชื่อผู้ใช้ดังนั้นไดเรกทอรีจะเก็บถาวร นี่คือคำสั่งที่ฉันใช้: find /path/to/directory/username/ -mtime +30 -exec mv "{}" /path/to/archive/username/ \; ผมแนะนำรุ่นล่าสุดนี้จะตอบคำถามเกี่ยวกับการขอให้อูบุนตูผู้ใช้อื่นแก้ไขรหัสเพื่อเปลี่ยนจุดสิ้นสุดของบรรทัด\;สำหรับ+เป็นมันเร็วขึ้น (และอื่น ๆ ถูกต้องหรือไม่) ดูที่นี่ อย่างไรก็ตามการใช้ +วิธีนี้ใช้ได้ถ้า-execคำสั่งนั้นls -lhไม่ใช่ในคำสั่งจริงที่ฉันใช้ ถ้าฉันลองด้วย+ฉันได้รับข้อความแสดงข้อผิดพลาด: find: missing argument to '-exec' ฉันไม่เข้าใจว่าทำไมมันทำงานแบบนี้หรือคำสั่งที่ถูกต้องจะเป็นอย่างไร โปรดอย่าเพิ่งโพสต์การแก้ไขคำสั่งฉันต้องการเข้าใจมากกว่าเพียงแค่ทำตามคำแนะนำอย่างสุ่มสี่สุ่มห้า

2
วิธีเปิดใช้งานคำแนะนำหากไม่พบคำสั่ง (“ คุณหมายถึง…”) ในเชลล์“ bash” หรือไม่
คล้ายกับคำถามนี้: ฉันจะลบคุณสมบัติ "คุณหมายถึง ... " ในเชลล์ได้อย่างไร เมื่อพิมพ์คำสั่งผิดคุณจะได้รับสิ่งต่อไปนี้: root@pc:~# sido No command 'sido' found, did you mean: Command 'sudo' from package 'sudo' (main) Command 'sudo' from package 'sudo-ldap' (universe) sido: command not found root@pc:~# มีปลั๊กอินของเชลล์สำหรับ linux หรือ ubuntu ที่แนะนำให้เดาคำแรกและฉันต้องกด enter? ดังนั้นควรเป็นเช่น: root@pc:~# sido No command 'sido' found, did you mean: Command …

4
เรียกใช้คำสั่งสุดท้ายด้วยตัวอักษรทั้งหมดที่เปลี่ยนเป็นตัวพิมพ์เล็ก
หลายครั้งที่ฉันรันคำสั่งด้วยตัวอักษรทั้งหมดเป็นตัวพิมพ์ใหญ่ (อาจCapsLockเป็นเพราะใช้งานได้) และฉันกดEnterก่อนที่จะรู้ตัว ฉันจะรันคำสั่งสุดท้ายด้วยตัวอักษรทั้งหมดที่เปลี่ยนเป็นตัวพิมพ์เล็กได้อย่างไร?

3
คำสั่ง Echo พร้อมตัวเลือกสีในสคริปต์และคำสั่งทำงานแตกต่างกัน
ถ้าฉันวิ่งเป็นecho -e "\e[1;31mThis is red text\e[0m"แถว comand มันจะพิมพ์ข้อความสีแดงออกมา อย่างไรก็ตามถ้าฉันใช้มันเขียนในไฟล์สคริปต์ test.sh #! /bin/bash echo -e "\e[1;31mThis is red text\e[0m" วิ่ง $ sh test.sh มันพิมพ์ออกมา -e \e[1;31mThis is red text\e[0m ทำไมพวกเขาถึงทำแตกต่างกันไป?

3
คำสั่ง "อัญประกาศ" ในเชลล์
การใช้คำสั่งquoteคืออะไร? ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับมันไม่ใช่ไฟล์ปฏิบัติการใน/binโฟลเดอร์และไม่พบใน Bash ในตัว ดูเหมือนว่ามันจะพิมพ์พารามิเตอร์แรกเท่านั้นเช่นechoคำสั่งและไม่มีอะไรเพิ่มเติม

4
การตั้งค่าเส้นทางเริ่มต้นเมื่อเปิดเซสชันเทอร์มินัล
ฉันใหม่สำหรับ Ubuntu เมื่อใดก็ตามที่ฉันเปิดเทอร์มินัลไดเรกทอรีการทำงานปัจจุบันของฉัน/home/Varun(ตามที่พบโดยการพิมพ์pwd) มีวิธีใดบ้างที่ฉันสามารถกำหนดเส้นทางของเทอร์มินัลให้ตั้งค่า/home/Varun/Desktop/Java Filesเมื่อเปิด

4
ฉันจะตั้งค่าพรอมต์ให้ใช้สองสีได้อย่างไร
สิ่งหนึ่งที่ฉันชอบเกี่ยวกับมิ้นท์คือเทอร์มินัลมักจะแสดงสองสี: ทุกอย่างจากซ้ายไปจนถึง$จะเป็นสีเดียวและทุกอย่างที่ผ่านมา$จะเป็นอีกสีหนึ่ง มีวิธีในการตั้งค่านี้ด้วย Ubuntu หรือไม่?

7
อัตโนมัติสมบูรณ์สำหรับคำสั่งบรรทัดคำสั่งที่ใช้บ่อยหรือไม่
สำหรับบางโครงการฉันมักพิมพ์คำสั่งคู่เช่น: cd an/extremely/long/path/in/which/I/have/some/kinda/project และ ./runmyproject --with some --command line --options set เมื่อเห็นว่าฉันค่อนข้างขี้เกียจฉันพยายามหลีกเลี่ยงการพิมพ์คำสั่งเหล่านั้นอย่างเต็มที่ซ้ำแล้วซ้ำอีก แน่นอนว่าฉันสามารถใช้คีย์ up-key เพื่อค้นหาคำสั่งเหล่านั้นกลับมา แต่บ่อยครั้งที่ฉันมีคำสั่งมากมายระหว่างนั้นการค้นหามันใช้เวลามากกว่าการพิมพ์ ตอนนี้ฉันสงสัยว่ามียูทิลิตี้บางประเภทที่สามารถแนะนำคำสั่งเต็มรูปแบบที่ฉันใช้บ่อยๆได้หรือไม่เมื่อฉันยังไม่ได้พิมพ์เลย เพื่อให้ฉันสามารถพิมพ์ 'cd an /' และมันแนะนำเส้นทางที่เหลืออยู่แล้วเพราะฉันใช้มันมากในเดือนที่ผ่านมา ฉันพบสิ่งที่เรียกว่า Bash Smart Complete แต่นั่นก็เป็น "โง่" เล็กน้อยซึ่งไม่ได้ดูคำสั่งที่ฉันใช้มาก่อน ฉันเพิ่งค้นพบคำตอบ SO นี้ซึ่งแนะนำให้วางคำสั่งที่ฉันใช้บ่อยๆในไฟล์ อย่างไรก็ตามไม่ตอบสนองพอที่ฉันจะต้องสร้างไฟล์ใหม่ทุกครั้งที่ฉันเริ่มโครงการใหม่หรือเปลี่ยนโฟลเดอร์หรือข้อโต้แย้งของโปรแกรม ไม่มีใครรู้ว่ายูทิลิตี้อื่น ๆ หรือวิธีการอื่นเพื่อให้บรรลุนี้ หรือใครจะรู้ว่าฉันสามารถเปลี่ยน Bash Smart Complete เพื่อให้สามารถดูคำสั่งที่ฉันใช้ในการพูดเดือนที่ผ่านมาและดำเนินการคำสั่งที่เหมาะสมและถูกใช้มากที่สุดในเดือนที่ผ่านมา? [แก้ไข] ด้านล่างเป็นคำตอบที่ดีจริงๆ ฉันยังทำเครื่องหมายว่าเป็นคำตอบที่แน่นอน ไม่ใช่เพราะฉันไม่ชอบคำตอบที่ฉันทำ แต่เพราะไม่มีใครที่จะเป็นผู้ชนะแน่นอน ฉันคิดว่า Finalterm เป็นโครงการที่ยอดเยี่ยม น่าเสียดายที่มันยังค่อนข้างหยาบอยู่รอบ …

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