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

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

3
ข้อผิดพลาดที่เป็นไปได้ใน Bash?: foo () {echo“ $ {var [0]}”; }; var = (bar baz) foo
ระบบปฏิบัติการ : Ubuntu 16.04.3 เชลล์ : ทุบตี 4.3.48 ฉันรู้ว่าเป็นไปได้ที่จะเปลี่ยนแปลงเนื้อหาของตัวแปรชั่วคราวในvar=value commandซึ่งอาจIFS= read -r varเป็นกรณีที่น่าสังเกตมากที่สุดของเรื่องนี้ และด้วยวิกิของเกร็กฉันก็เข้าใจเช่นกัน: # Why this foo() { echo "$var"; } var=value foo # And this does work var=value; echo "$var" # But this doesn't var=value echo "$var" สิ่งนี้ทำให้ฉันเข้าใจได้: $ foo() { echo "${var[0]}"; } $ var=(bar baz) foo …
22 bash  array 

1
วิธีการเรียกสคริปต์หลังจากทุกคำสั่ง bash
เป็นไปได้ไหมที่จะเรียกสคริปต์ในตัวอย่างนี้ตั้งชื่อhey.shตามคำสั่ง bash ทุกคำ? ตัวอย่างเช่นคุณพิมพ์lshit enter และ ls ทำงานจากนั้นhey.shจะเรียกใช้ จากนั้นคุณพิมพ์cd .. (หรือคำสั่งอื่น ๆ )จากนั้นซีดีhey.shจะทำงานและอื่น ๆ
22 bash 

2
Bash regex group capture
ฉันพยายามจับคู่ค่าตัวอักษรและตัวเลขหลายตัว (ตัวเลขนี้อาจแตกต่างกันไป) จากสตริงและบันทึกลงในอาร์เรย์กลุ่มการจับภาพทุบตี อย่างไรก็ตามฉันได้รับนัดแรกเท่านั้น: mystring1='<link rel="self" href="/unix//api/clouds/1/instances/1BBBBBB"/> dsf <link rel="self" href="/unix//api/clouds/1/instances/2AAAAAAA"/>' regex='/instances/([A-Z0-9]+)' [[ $mystring1 =~ $regex ]] echo ${BASH_REMATCH[1]} 1BBBBBB echo ${BASH_REMATCH[2]} อย่างที่คุณเห็นมันตรงกับค่าแรกที่ฉันกำลังค้นหา แต่ไม่ใช่ค่าที่สอง

5
ฉันจะลบไฟล์ชื่อ“>” ได้อย่างไร?
ผมทำงานสคริปต์หลามที่ผิดปกติและนำมาใช้ในการสร้างไฟล์ชื่อsudo> ฉันจะกำจัดไฟล์นี้ได้อย่างไร แน่นอนว่าเมื่อฉันพยายามที่sudo rm >ฉันได้รับข้อผิดพลาดเพราะคิดว่าฉันพยายามที่จะเปลี่ยนเส้นทางการส่งออกของbash: syntax error near unexpected token 'newline'rm -rw-r--r--มันเป็นสิทธิ์
22 bash  quoting  filenames  rm 

1
ลำดับการหลีกสีของเทอร์มินัลถูกกำหนดไว้ทุกที่เพื่อทุบตีหรือไม่?
ฉันใช้ทุกสีบ่อยในการเขียนสคริปต์ Bash (ส่วนใหญ่เป็น CentOS) แต่เพื่อให้การใช้งานของพวกเขาง่ายขึ้นฉันก็สิ้นสุดการกำหนดตัวแปรใหม่เป็นค่าสี: local GRAY="\[\033[1;30m\]" local LIGHT_GRAY="\[\033[0;37m\]" local CYAN="\[\033[0;36m\]" local LIGHT_CYAN="\[\033[1;36m\]" local NO_COLOUR="\[\033[0m\]" หรือด้วยtput: bold=`tput bold` normal=`tput sgr0` whitef=`tput setaf 7` greenf=`tput setaf 2` redb=`tput setab 1` ฉันเคย grep'ed รอบ/etc/rc.d/init.dไดเรกทอรี แต่ไม่พบสิ่งที่เกี่ยวข้องกับคำจำกัดความสีในนั้น มีคำจำกัดความดังกล่าวแล้วหรือยัง? ถ้าไม่ใช่ฉันจะเอาไฟล์เหล่านั้นใส่ลงในไฟล์/etc/rc.d/init.dเพื่อพูดและรวมไว้ในสคริปต์ของฉัน/etc/rc.d/init.d/functions
22 bash  terminal  colors 

2
คัดลอกไฟล์ที่มีนามสกุลหลาย ๆ ตัว
ฉันต้องการคัดลอกไฟล์ที่มีหลายนามสกุลไปยังไดเรกทอรีปลายทางเดียว ตัวอย่างเช่นฉันสามารถใช้คำสั่งต่อไปนี้เพื่อคัดลอกไฟล์. txtทั้งหมดในไดเรกทอรีทำงานไปยังไดเรกทอรีที่เรียกว่าdestination: cp -v *.txt destination/ และฉันสามารถใช้สิ่งต่อไปนี้เพื่อคัดลอกไดเรกทอรี. pngทั้งหมดในไดเรกทอรีทำงานไปที่destination: cp -v *.png destination/ แต่ใช้เวลานานในการพิมพ์คำสั่งเหล่านี้เป็นคำสั่งแยกต่างหาก (แม้จะใช้ประวัติคำสั่ง) ดังนั้นจะมีวิธีการที่ผมสามารถบอกได้ใด ๆcpในการคัดลอกไฟล์ที่มีทั้งรูปแบบ*.txt หรือรูปแบบ*.pngที่จะdestination? จะเป็นการดีที่ฉันต้องการที่จะสามารถระบุมากกว่าสองรูปแบบที่ชอบ - สอนcpการคัดลอกทั้งหมด*.txt หรือ *.png หรือ *.jpgไฟล์ไปdestinationยกตัวอย่างเช่น ฉันแน่ใจว่าทั้งหมดนี้เป็นไปได้โดยใช้เชลล์สคริปต์ - ฉันใช้bash- แต่มีวิธีใดที่จะทำให้สำเร็จได้ง่ายขึ้นเพียงจากคอนโซลหรือไม่ ฉันจะใช้การขยายรั้งเพื่อทำมันได้หรือไม่? ฉันรู้ว่ามันเป็นไปได้ที่จะคัดลอกไฟล์ทั้งหมดในไดเรกทอรีการทำงานยกเว้นที่ตรงกับรูปแบบที่ระบุบางอย่างแต่เนื่องจากไดเรกทอรีการทำงานของฉันมีนามสกุลไฟล์มากกว่าที่ฉันไม่ต้องการคัดลอกกว่าที่ฉันทำซึ่งจะเป็นความเจ็บปวด คุณมีความคิดเกี่ยวกับสิ่งนี้หรือไม่?
22 bash  shell  wildcards  cp 

3
เปรียบเทียบสองสตริงใน Bash
ฉันมีifบล็อกต่อไปนี้ในสคริปต์ทุบตีของฉัน: if [ ${PACKAGENAME} -eq kakadu-v6_4-00902C ]; then echo "successfully entered if block!!" fi การดำเนินการสคริปต์ไม่ได้เข้ามาของฉันifบล็อกแม้ว่าจะมีค่าเท่ากับ$PACKAGENAME kakadu-v6_4-00902Cผมทำอะไรผิดหรือเปล่า?

3
มีความแตกต่างที่สำคัญเมื่อเปรียบเทียบตัวแปรเป็นสตริงหรือเป็น int
จากความอยากรู้เมื่อทำการเปรียบเทียบตัวแปรทุบตี (ความคุ้มค่าเป็นinteger) ก็เป็นไปได้ที่จะทดสอบกับค่าที่กำหนดไว้ล่วงหน้าบางส่วนประกาศว่าจะเป็นหรือเป็นintstring สคริปต์ตัวอย่าง : #!/bin/bash f1() { [ "$1" == "1" ] && echo "$FUNCNAME: \"1\" compared as string" } f2() { [[ "$1" -eq 1 ]] && echo "$FUNCNAME: \"1\" compared as int" } f1 $1 f2 $1 ผลผลิต : $ ./param.sh 1 f1: "1" compared as string …
22 bash  shell  test 

2
ตั้งค่าพื้นหลังเทอร์มินัล gnome / สีข้อความจากสคริปต์ทุบตี
ฉันต้องการตั้งค่าพื้นหลังของเทอร์มินอล gnome ( #002b36) และสีพื้นหน้าใน ubuntu 13 โดยใช้ bash script ฉันพยายามgconftoolแต่ไม่ประสบความสำเร็จ GCONFTOOL-2(1) User Commands GCONFTOOL-2(1) NAME gconftool-2 - GNOME configuration tool gnome terminalรุ่นของฉันคือ $ gnome-terminal --version GNOME Terminal 3.6.1 ขณะนี้ฉันกำลังใช้ UI การตั้งค่าเทอร์มินัลอูบุนตูเพื่อให้ได้สิ่งนี้

2
ฉันจะย้ายไฟล์ทั้งหมดที่ส่งออกจากคำสั่งได้อย่างไร
ฉันมีคำสั่ง grep นี้เพื่อค้นหาไฟล์ที่ไม่มีคำว่า Attachments ในนั้น grep -L -- Attachments * ฉันต้องการย้ายไฟล์ทั้งหมดที่ส่งออกจากคำสั่งนั้น ฉันจะทำเช่นนั้นได้อย่างไรในทุบตี? ฉันจะใช้ท่อหรือไม่ ฉันจะใช้คำฟุ่มเฟือยถ้า / จากนั้นคำสั่งในสคริปต์แบบเต็ม?

1
ส้อมระเบิดทำงานอย่างไร
คำเตือนอย่าพยายามเรียกใช้สิ่งนี้บนเครื่องผลิต ในการอ่านหน้า Wikipedia ในหัวข้อฉันมักจะติดตามสิ่งที่เกิดขึ้นด้วยรหัสต่อไปนี้: :(){ :|:& };: ตัดตอนมาจากคำอธิบาย ระเบิดส้อมต่อไปนี้ถูกนำเสนอเป็นศิลปะในปี 2002;56 แหล่งกำเนิดที่แน่นอนของมันไม่เป็นที่รู้จัก แต่มันอยู่บน Usenet ปี 2002 ก่อนที่จะระเบิดจะถูกดำเนินการโดยการวางต่อไปนี้ 13 ตัวเป็น UNIXเปลือกเช่นทุบตีหรือzsh มันทำงานโดยการกำหนดฟังก์ชั่นที่เรียกว่า ':' ซึ่งเรียกตัวเองว่าสองครั้งหนึ่งครั้งในเบื้องหน้าและอีกครั้งในพื้นหลัง อย่างไรก็ตามบิตสุดท้ายไม่ชัดเจนสำหรับฉัน ฉันเห็นนิยามของฟังก์ชัน: :(){ ... } แต่จะเกิดอะไรขึ้น นอกจากนี้ยังทำหอยอื่น ๆ เช่นksh, cshและtcshยังประสบชะตากรรมเดียวกันของความสามารถที่จะสร้างบางสิ่งบางอย่างที่คล้ายกัน?
22 bash  shell-script  zsh  fork 

2
Bash ไม่ได้อ่าน. bashrc นอกจากว่าจะเริ่มด้วยตนเอง
bashจะไม่ได้มา.bashrcจากเทอร์มินัลเชิงโต้ตอบเว้นแต่ว่าฉันจะเรียกใช้bashจากเทอร์มินัลด้วยตนเอง: $ bash หรือแหล่งที่มาด้วยตนเอง: $ source ./.bashrc หรือทำงาน: $ st -e bash นี่คือผลลัพธ์ที่มีประโยชน์ฉันหวังว่า: $ echo $TERM st-256color $ echo $SHELL /bin/sh $ readlink /bin/sh bash $ shopt login_shell login_shell off ฉัน CRUX ลินุกซ์ 3.0 และฉันจะใช้และdwm stฉันพยายามใช้.bash_profileและ.profileไม่ประสบความสำเร็จ ความคิดใด ๆ
22 linux  bash  shell  bashrc 

4
ฉันจะบอกได้อย่างไรว่านามแฝงคำสั่งย่อมาจากอะไร?
llเป็นนามแฝงทั่วไปใน distros Linux จำนวนมาก ฉันจะบอกได้อย่างไรว่าชื่อแทนเป็นอย่างไร ฉันลองตรวจสอบ.bashrcแล้ว แต่ฉันไม่สามารถบอกได้ว่าอะไรที่llเทียบเท่า
22 bash  alias 

9
รักษาโครงสร้างไดเรกทอรีเมื่อย้ายไฟล์โดยใช้การค้นหา
ฉันสร้างสคริปต์ต่อไปนี้ซึ่งย้ายไฟล์วันเก่าตามที่กำหนดจากไดเรกทอรีต้นทางไปยังไดเรกทอรีปลายทาง มันทำงานได้อย่างสมบูรณ์แบบ #!/bin/bash echo "Enter Your Source Directory" read soure echo "Enter Your Destination Directory" read destination echo "Enter Days" read days find "$soure" -type f -mtime "-$days" -exec mv {} "$destination" \; echo "Files which were $days Days old moved from $soure to $destination" สคริปต์นี้ย้ายไฟล์ได้อย่างยอดเยี่ยมนอกจากนี้ยังย้ายไฟล์ของไดเรกทอรีย่อยต้นทาง แต่ไม่สร้างไดเรกทอรีย่อยลงในไดเรกทอรีปลายทาง ฉันต้องการใช้คุณสมบัติเพิ่มเติมนี้ในนั้น ด้วยตัวอย่าง /home/ketan …

1
รันคำสั่งประวัติหลายครั้งอีกครั้ง
ลองนึกภาพคุณแค่เรียกใช้คำสั่งโหล พูด... $ cd foo/ # history cmd #10000 (my history is very long) $ ... more commands ... $ cd ../ # history cmd #10012 ฉันรู้ว่าฉันสามารถรันพวกเขาต่อกันได้!-12 && !-11 && !-10 && (and so on) && !!หากพวกเขาเพิ่งจะถูกเรียกใช้ (ไม่น่าเป็นไปได้) หรือ!10000 && !10001 && !10002 && (and so on)แต่มีวิธีที่ง่ายกว่าการพิมพ์ตัวเลขแต่ละหมายเลขด้วยปังและแอมเปอร์แซนด์ อาจมีบางสิ่งบางอย่างที่ฉันไม่รู้ในการทุบตี? เช่น!{10000-10012}# บางอย่างเช่นนี้ใช้งานได้เท่านั้น

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