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

คำถามเกี่ยวกับการใช้ฟังก์ชั่นในบริบทของ Unix & Linux (ส่วนใหญ่ แต่ไม่เฉพาะเชลล์สคริปต์) ควรถามคำถามเกี่ยวกับการเขียนโปรแกรมใน Python, Perl, Ruby และอื่น ๆ ใน Stack Overflow


2
วิธีการเพิ่มตัวแปรท้องถิ่นใน Bash
ข้อมูล 1 \begin{document} 3 รหัส #!/bin/bash function getStart { local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)" echo $START } START2=$(getStart) echo $START2 ซึ่งผลตอบแทนแต่ฉันต้องการ2 3ฉันเปลี่ยนปลายไม่สำเร็จโดยคำตอบนี้เกี่ยวกับฉันจะเพิ่มตัวเลขในสคริปต์ทุบตี : START2=$((getStart+1)) คุณจะเพิ่มตัวแปรโลคอลในสคริปต์ Bash ได้อย่างไร?

3
วิธีการกำหนดฟังก์ชั่น Bash ที่สามารถใช้งานได้โดยสคริปต์ที่แตกต่างกัน
ฉันได้กำหนดbashฟังก์ชั่นใน~/.bashrcไฟล์ของฉัน สิ่งนี้ทำให้ฉันใช้มันในเทอร์มินัลเชลล์ อย่างไรก็ตามดูเหมือนว่าจะไม่มีอยู่เมื่อฉันเรียกมันจากภายในสคริปต์ ฉันจะกำหนดbashฟังก์ชั่นที่สคริปต์ใช้งานได้อย่างไร?

2
ฉันจะกำหนดฟังก์ชันทุบตีใหม่ในแง่ของคำนิยามเก่าได้อย่างไร
มีวิธีใดที่ฉันสามารถกำหนดฟังก์ชันทุบตีใหม่ในแง่ของนิยามเก่าหรือไม่? ยกตัวอย่างเช่นผมต้องการที่จะเพิ่มบล็อกของรหัสต่อไปคำนำของฟังก์ชั่นcommand_not_found_handle (), # Check if $1 is instead a bash variable and print value if it is local VAL=$(eval echo \"\$$1\") if [ -n "$VAL" ] && [ $# -eq 1 ]; then echo "$1=$VAL" return $? fi ขณะนี้มีการกำหนดไว้ใน /etc/profile.d/PackageKit.sh และมีที่มาจากสคริปต์เริ่มต้นระบบ bash ด้วยวิธีนี้ฉันสามารถค้นหาค่าของตัวแปรสภาพแวดล้อมที่พรอมต์คำสั่งเพียงพิมพ์ชื่อตัวแปร (และระบุว่าไม่มีคำสั่งดังกล่าวโดยใช้ชื่อนั้น) เช่น user@hostname ~:$ LANG LANG=en_AU.utf8 …
13 bash  function 

2
อักขระชื่อฟังก์ชันที่ถูกต้องของเชลล์
การใช้อักขระ Unicode แบบขยาย (ไม่มีข้อสงสัย) มีประโยชน์สำหรับผู้ใช้หลายคน เชลล์ที่ง่ายกว่า (ash (busybox), dash) และ ksh ล้มเหลวด้วย: tést() { echo 34; } tést แต่bash , mksh , lkshและzshดูเหมือนจะอนุญาต ฉันทราบว่าชื่อฟังก์ชันที่ถูกต้อง POSIX ใช้นิยามของชื่อนี้ นั่นหมายถึง regex นี้: [a-zA-Z_][a-zA-Z0-9_]* อย่างไรก็ตามในลิงค์แรกมันยังกล่าวว่า: การใช้งานอาจอนุญาตให้ตัวละครอื่น ๆ ในชื่อฟังก์ชั่นเป็นส่วนขยาย คำถามคือ: สิ่งนี้ได้รับการยอมรับและจัดทำเป็นเอกสารหรือไม่? ที่ไหน? เปลือกหอยไหน (ถ้ามี)? คำถามที่เกี่ยวข้อง: เป็นไปได้ใช้อักขระพิเศษในชื่อฟังก์ชันเปลือก? ฉันไม่สนใจที่จะใช้เมตาอักขระ (>) ในชื่อฟังก์ชัน ชื่อฟังก์ชันพุ่งพรวดและทุบตีที่มี“ -” ฉันไม่เชื่อว่าตัวดำเนินการ (การลบ "-") ควรเป็นส่วนหนึ่งของชื่อ
13 bash  shell  zsh  function 

2
Bash Scripting สะท้อนอยู่ภายในฟังก์ชัน
ในสคริปต์ทุบตีฉันพยายามทำให้ตัวแปรของฉันอยู่ในตัวเครื่องให้สามารถทำงานได้ทุกที่และจากนั้นส่งผ่านสิ่งที่ฉันต้องการจากการทำงานเช่นการร้อง #!/bin/bash function FUNCTION() { local LOCAL="value" echo "$LOCAL" # return this variable } GLOBAL=$(FUNCTION) echo "$GLOBAL" แต่มันเป็นไปได้ที่จะทำเช่นนี้ในขณะที่รวมถึง echos ของฟังก์ชั่นเพื่อที่ว่าถ้าฟังก์ชั่นนั้นมีข้อความของตัวเองเพื่อส่งออกฉันไม่ต้องจับมันในตัวแปร #!/bin/bash function FUNCTION() { local LOCAL="value" echo "$LOCAL" # return this variable echo "This function is done now" # do not return this variable } GLOBAL=$(FUNCTION) echo "$GLOBAL" # should …

2
พารามิเตอร์ทางเลือกในฟังก์ชั่นทุบตี
ฉันมีฟังก์ชั่นสำหรับการสร้างสาขา SVN ใหม่ที่รวดเร็ว function svcp() { svn copy "repoaddress/branch/$1.0.x" "repoaddress/branch/dev/$2" -m "dev branch for $2"; } ซึ่งฉันใช้เพื่อสร้างสาขาใหม่อย่างรวดเร็วโดยไม่ต้องค้นหาและคัดลอกวางที่อยู่และสิ่งอื่น ๆ อย่างไรก็ตามสำหรับข้อความ (ตัวเลือก -m) ฉันต้องการที่จะให้มันถ้าฉันให้พารามิเตอร์ที่สามจากนั้นที่จะใช้เป็นข้อความมิฉะนั้นข้อความ 'เริ่มต้น' ของ "dev สาขาราคา $ 2" บางคนสามารถอธิบายวิธีการนี้ได้หรือไม่

3
ออกจากฟังก์ชัน bash ไม่ใช่เทอร์มินัล
ฉันมีสคริปต์ทุบตีด้านล่างซึ่งติดตั้ง Zookeeper แต่ถ้าไม่ได้ติดตั้งแล้ว ##zookeper installZook(){ ZOOK_VERSION="3.4.5" ZOOK_TOOL="zookeeper-${ZOOK_VERSION}" ZOOK_DOWNLOAD_URL="http://www.us.apache.org/dist/zookeeper/${ZOOK_TOOL}/${ZOOK_TOOL}.tar.gz" if [ -e $DEFAULT_INSTALLATION_DEST/${ZOOK_TOOL} ]; then echo "${ZOOK_TOOL} alreay installed"; exit 1; # <<<< here elif [ ! -e $DEFAULT_SOURCE_ROOT/${ZOOK_TOOL}.tar.gz ]; then wgetIt $ZOOK_DOWNLOAD_URL else echo "[info] : $DEFAULT_SOURCE_ROOT/$ZOOK_TOOL already exists" fi sudo mkdir -p /var/lib/zookeeper sudo mkdir -p /var/log/zookeeper tarIt "$DEFAULT_SOURCE_ROOT/$ZOOK_TOOL.tar.gz" …

2
%% หมายถึงอะไรในชื่อฟังก์ชัน
เมื่อดูที่ผลลัพธ์ของenvฉันพบว่ามีฟังก์ชั่นต่อไปนี้ BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh } เนื้อหาของไฟล์ /usr/share/mc/mc-wrapper.sh มีดังต่อไปนี้ MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE สิ่งที่ทำ%%อักขระหมายถึงในชื่อฟังก์ชัน? พวกเขาทำให้มันเป็นฟังก์ชั่นที่เรียกใช้ในกรณีที่เฉพาะเจาะจงหรือพวกเขาอนุญาตให้ฉันเรียกมันแตกต่างจากฟังก์ชั่นอื่น ๆ ? ฉันใช้ …

1
แสดงความคิดเห็นการใช้งานในฟังก์ชั่นที่ตั้งใจจะใช้แบบโต้ตอบ
ฉันมีฟังก์ชั่นจำนวนมากที่กำหนดไว้ใน.bashrcเจตนาของฉันที่จะใช้แบบโต้ตอบในเทอร์มินัล ฉันมักจะนำหน้าพวกเขาด้วยความคิดเห็นที่อธิบายการใช้งานที่ตั้งใจ: # Usage: foo [bar] # Foo's a bar into a baz foo() { ... } นี่เป็นสิ่งที่ดีถ้าเรียกดูซอร์สโค้ด แต่มันก็ดีที่จะรันtypeในเทอร์มินัลเพื่อรับการแจ้งเตือนอย่างรวดเร็วเกี่ยวกับสิ่งที่ฟังก์ชั่นทำ อย่างไรก็ตามสิ่งนี้ (เข้าใจได้) ไม่รวมความคิดเห็น: $ type foo foo is a function foo () { ... } สิ่งใดที่ทำให้ฉันคิดว่า "จะไม่ดีถ้าความคิดเห็นเหล่านี้ยังคงอยู่เพื่อที่typeจะสามารถแสดงได้" และในจิตวิญญาณของงูหลามของdocstringsฉันมาด้วยนี้ foo() { : Usage: foo [bar] : "Foo's a bar into a baz" …

1
ทุบตีนามแฝงที่มีช่องว่างเป็นส่วนหนึ่งของคำสั่ง
ฉันพยายามที่จะสร้างนามแฝงทุบตีที่ชื่อแทนตัวเองมีช่องว่างในนั้น ความคิดคือนามแฝง (คือcon) sudo openvpn --config /path/to/my/openvpn/configs/ย่อมาจาก ซึ่งส่งผลให้คำสั่งอ่านได้เมื่อใช้conนามแฝง เช่น: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf` con ="sudo openvpn --config /path/to/my/openvpn/configs/"ฉันเข้าใจว่าฉันไม่สามารถประกาศนามแฝงเช่นนี้ ฟังก์ชั่นทุบตีจะทำงานในสถานการณ์นี้หรือไม่ ฉันไม่เคยได้ยินเรื่องนี้มาก่อน แต่เมื่อค้นคว้าวิธีแก้ปัญหาสำหรับปัญหาเล็กน้อยนี้

2
วิธีจัดทำฟังก์ชั่นทุบตีและนามแฝงที่กำหนดเองของฉัน
ปัญหา: ฉันมีฟังก์ชั่นทุบตีและชื่อแทนหลายรายการ ฉันจำไม่ได้ว่าพวกเขาทั้งหมดอยู่ด้านบนของหัวของฉันดังนั้นฉันมักจะเปิดท้ายของฉัน.bash_functionsและ.bash_aliasesไฟล์เพื่อค้นหาสิ่งที่ฉันต้องการ คำถาม (s): ฉันจะแสดงรายการฟังก์ชั่น / นามแฝงที่มีอยู่จาก bash prompt ได้อย่างไร? เป็นไปได้ไหมที่ฉันจะทำเอกสารฟังก์ชั่นทุบตี / นามแฝงของฉันโดยใช้ความคิดเห็น (kinda เช่น PHPDoc)? ฉันแค่ต้องการวิธีที่ง่าย / ดีในการแสดงผลสิ่งที่มีอยู่โดยไม่ต้องเปิดไฟล์ มันจะเจ๋งมากในการรันคำสั่งและปล่อยให้มันมีรายการแบบไดนามิกของฟังก์ชั่น / ชื่อแทนของฉัน (ตัวอย่างการใช้งานจะเป็นบวก) :)

1
ดูนิยามปัจจุบันของฟังก์ชัน shell
ดังนั้นฉันจึงแก้ไข bashrc อย่างต่อเนื่องและฉันมีเทอร์มินัลเปิดพร้อมกับนิยามฟังก์ชั่นการทำงานแม้ว่า bashrc ได้รับการปรับปรุงด้วยนิยามฟังก์ชั่นที่ไม่ถูกต้อง (เนื่องจากคำจำกัดความไม่เปลี่ยนแปลงจนกว่าฉันจะจัดหา bashrc ที่อัปเดตแล้ว) ฉันจะค้นหาคำนิยามฟังก์ชันการทำงานในกรณีนี้ได้อย่างไร ตัวอย่างเช่นถ้าฉันพิมพ์: alias function_name ฉันสามารถดูความหมายของนามแฝงนั้นได้ มีคำสั่งที่คล้ายกันสำหรับฟังก์ชั่นหรือไม่? หากไม่มีมีคำสั่งให้ส่งเอาต์พุต bashrc ทั้งหมดที่เทอร์มินัลปัจจุบันใช้หรือไม่?
11 function  bashrc 

2
คุณสามารถอธิบายสามสิ่งนี้ในรหัสทุบตีนี้ให้ฉันได้ไหม
ฉันมีfunctionใน.bashrcไฟล์ของฉัน ฉันรู้ว่ามันทำอะไรมันทำตามขั้นตอน X หลาย ๆ ไดเรกทอรีด้วยcd นี่มันคือ: up() { local d="" limit=$1 for ((i=1 ; i <= limit ; i++)) do d=$d/.. done d=$(echo $d | sed 's/^\///') if [ -z "$d" ]; then d=.. fi cd $d } แต่คุณสามารถอธิบายสามสิ่งนี้จากฉันได้ไหม? d=$d/.. sed 's/^\///' d=.. ทำไมไม่ทำเช่นนี้: up() { limit=$1 for ((i=1 …

4
กำหนดและตรวจสอบข้อมูลเมตาของฟังก์ชัน bash
ฉันมักจะสร้างและลงทะเบียนฟังก์ชั่นทุบตีจำนวนมากที่ทำงานหลายอย่างที่ฉันทำในโครงการพัฒนาของฉันโดยอัตโนมัติ การสร้างนั้นขึ้นอยู่กับ meta-data ของโครงการที่ฉันกำลังดำเนินการ ฉันต้องการใส่คำอธิบายประกอบฟังก์ชั่นด้วยข้อมูลของโครงการที่สร้างขึ้นด้วยวิธีนี้: func1() { # This function was generated for project: PROJECT1 echo "do my automation" } เป็นการดีที่ฉันจะสามารถเห็นความคิดเห็นเมื่อฉันตรวจสอบคำจำกัดความ: $ type func1 func1 is a function func1 () { # This function was generated for project: PROJECT1 echo "do my automation" } แต่อย่างใดทุบตีดูเหมือนว่าจะไม่สนใจความคิดเห็นในขณะโหลดฟังก์ชั่นไม่ได้เมื่อดำเนินการ ดังนั้นความคิดเห็นจะหายไปและฉันได้รับผลลัพธ์นี้: func1 is a function …
10 bash  function 

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