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



9
ฉันจะสะท้อนเอาต์พุต 1 คอลัมน์จากคำสั่ง ls ได้อย่างไร
ให้พูดเมื่อฉันทำคำสั่ง ls ผลลัพธ์คือ: file1 file2 file3 file4 เป็นไปได้หรือไม่ที่จะแสดงเฉพาะคอลัมน์ของเอาต์พุตในกรณีนี้ file2? ฉันได้ลองทำสิ่งต่อไปนี้โดยไม่ประสบความสำเร็จ: echo ls | $2 โดยพื้นฐานทั้งหมดที่ฉันต้องการทำคือ echo เฉพาะคอลัมน์ที่สองในกรณีนี้ฉันต้องการ echo: file2
54 bash  ls  parameter  arguments 

3
แปลงอาร์เรย์เป็นอาร์กิวเมนต์ของคำสั่งหรือไม่?
ฉันมีอาร์เรย์ของ "ตัวเลือก" ของคำสั่ง my_array=(option1 option2 option3) ฉันต้องการเรียกคำสั่งนี้ในสคริปต์ทุบตีโดยใช้ค่าจากอาร์เรย์เป็นตัวเลือก ดังนั้นcommand $(some magic here with my_array) "$1"กลายเป็น: command -option1 -option2 -option3 "$1" ฉันจะทำมันได้อย่างไร เป็นไปได้ไหม?
39 bash  parameter  array 


4
ทุบตีรายการไฟล์วนซ้ำยกเว้นเมื่อว่างเปล่า
ฉันคิดว่ามันจะง่าย - แต่มันพิสูจน์ได้ซับซ้อนกว่าที่ฉันคาดไว้ ฉันต้องการวนซ้ำไฟล์ทั้งหมดของชนิดเฉพาะในไดเรกทอรีดังนั้นฉันจึงเขียนสิ่งนี้: #!/bin/bash for fname in *.zip ; do echo current file is ${fname} done ทำงานได้ตราบใดที่มีไฟล์ที่ตรงกันอย่างน้อยหนึ่งไฟล์ในไดเรกทอรี อย่างไรก็ตามหากไม่มีไฟล์ที่ตรงกันฉันจะได้รับสิ่งนี้: current file is *.zip ฉันลองแล้ว: #!/bin/bash FILES=`ls *.zip` for fname in "${FILES}" ; do echo current file is ${fname} done ในขณะที่เนื้อความของลูปไม่ทำงานเมื่อไม่มีไฟล์ฉันได้รับข้อผิดพลาดจาก ls: ls: *.zip: No such file or directory ฉันจะเขียนลูปที่จัดการไม่มีไฟล์ที่ตรงกันได้อย่างหมดจดได้อย่างไร
33 bash  parameter 

2
พฤติกรรมที่ถูกต้องของกับดัก EXIT และ ERR เมื่อใช้ `set -eu`
ฉันสังเกตเห็นพฤติกรรมแปลก ๆ บางอย่างเมื่อใช้set -e( errexit), set -u( nounset) พร้อมกับดัก ERR และ EXIT ดูเหมือนว่าพวกเขาเกี่ยวข้องกันดังนั้นการใส่คำถามเหล่านั้นลงในคำถามเดียวก็สมเหตุสมผล 1) set -uไม่เรียกใช้กับดัก ERR รหัส: #!/bin/bash trap 'echo "ERR (rc: $?)"' ERR set -u echo ${UNSET_VAR} คาดว่า: มีการเรียกใช้กับดัก ERR, RC! = 0 จริง: ไม่ได้เรียกกับแทร็บ ERR , RC == 1 หมายเหตุ: set -eไม่เปลี่ยนผลลัพธ์ 2) การใช้set -euรหัสออกในกับดักของ EXIT คือ …

2
คำศัพท์เกี่ยวกับบรรทัดคำสั่ง: ส่วนใดบ้างของคำสั่งที่เรียกว่า
ที่บรรทัดคำสั่งฉันมักจะใช้คำสั่ง "ง่าย" เช่น mv foo/bar baz/bar แต่ฉันไม่รู้ว่าจะเรียกทุกส่วนของสิ่งนี้: ┌1┐ ┌──2───┐ git checkout master │ └──────3──────┘ └───────4─────────┘ ผม (คิดว่าฉัน) รู้ว่า1เป็นคำสั่งและ2เป็นข้อโต้แย้งและผมอาจจะเรียก3รายการอาร์กิวเมนต์ (คือว่าถูกต้องหรือไม่) แต่ผมไม่ทราบว่าจะเรียก4 ป้ายกำกับ "คำสั่ง" ที่ซับซ้อนมากขึ้นอย่างไร find transcripts/?.? -name '*.txt' | parallel -- sh -c 'echo $1 $2' {} {/} ฉันขอขอบคุณคำตอบที่แยกสิ่งที่จะเรียก 1,2,3,4 และสิ่งที่เรียกส่วนต่างๆของเช่น "คำสั่ง" ด้านบนนี้ มันจะเป็นการดีที่ได้เรียนรู้เกี่ยวกับสิ่งอื่น ๆ ที่ไม่เหมือนใคร / แปลกใจที่ฉันไม่ได้รวมอยู่ที่นี่


2
พารามิเตอร์ GRUB2 และเคอร์เนล vga =
ตามเอกสารประกอบการใช้vga=พารามิเตอร์เคอร์เนลจะถูกคัดค้าน ณ วันที่ของ GRUB2 ความจริงที่ว่าเมล็ดพันธุ์ใหม่บางอันดูเหมือนจะไม่สนับสนุนอีกต่อไปในอะแดปเตอร์บางรุ่นก็ไม่ต้องกังวลเพราะกราฟิกการ์ดที่ฉันมีอายุเจ็ดถึงแปดปี ปัญหาตอนนี้คือฉันต้องการใช้โหมดข้อความความละเอียดสูงกว่าเช่น 80x50 แทนที่จะเป็นตัวอักษรเริ่มต้น 80x25 เห็นได้ชัดว่ากราฟิก (VBE / VESA) โหมดการจะออกจากคำถามสำหรับนี้กราฟิกการ์ด (ATI Rage XL) - รายการของโหมดที่สามารถใช้ได้เพียงแสดงให้เห็นผ่าน0 มันดูน่ากลัว แต่ฉันอยากไปด้วย(80x50)6680x601 ฉันเห็น 80x50 และ 80x60 ทำงานหลังจากรับรายการของโหมดที่มีอยู่เมื่อใดก็ตามที่ไม่รองรับโหมดเริ่มต้น (โดยมีการใส่ความคิดเห็นเริ่มต้นGRUB_TERMINAL=console) และฉันได้รับแจ้งให้เลือก ฉันจะตั้งค่าโหมดได้อย่างไรถ้าฉันไม่ควรตั้งค่าบนบรรทัดคำสั่งเคอร์เนลและการใช้งานทุกครั้งGRUB_GFXMODE(ไม่ว่าจะมีหรือไม่มีvbeโมดูลการโหลดล่วงหน้า) และGRUB_GFXPAYLOAD_LINUX=keepล้มเหลวหรือไม่ ล้มเหลวเช่นเดียวกับใน: หน้าจอว่างเปล่าเนื่องจากเป็นโหมดกราฟิกที่ไม่ถูกต้องสำหรับการ์ดที่ฉันมีในเครื่องนี้หรือไม่ ความคิดของฉันคือการส่งผ่านnomodesetไปยังเคอร์เนล แต่บูตโหลดเดอร์จะยังคงต้องตั้งค่าโหมดกราฟิก และฉันไม่เห็นตัวเลือกอื่นใดนอกจากvga=พารามิเตอร์เคอร์เนลสำหรับการทำเช่นนั้น หมายเหตุ:vbetestและvideotestคำสั่งใน GRUB2 Console จะว่างเปล่าหน้าจอแล้วหน้าจอสลับไปที่โหมดการนอนหลับหลังจากที่อ้างว่าไม่มีการใส่วิดีโอ vbeinfoและvideoinfoแสดงโหมดที่มีอยู่สองสามโหมดนอกเหนือจากที่กล่าวถึงข้างต้น แต่ไม่มีการกล่าวถึงว่าควรตั้งค่าที่ใด นอกจากนี้เมื่อผ่านvga=1(ไม่nomodeset) ในบรรทัดคำสั่งเคอร์เนลผมเห็นคำเตือนสั้น ๆ เกี่ยวกับเรื่องนี้ถูกเลิก แต่มันยาวเกินไปที่จะอ่านอย่างสมบูรณ์ - dmesgและการส่งออกจะไม่ปรากฏใน

1
ดำเนินการคำสั่งที่จัดทำโดยพารามิเตอร์ฟังก์ชัน
ฉันพยายามที่จะสร้างวิธีการฟังก์ชั่นในสคริปต์ทุบตีที่ดำเนินการคำสั่งซึ่งให้กับวิธีการโดยพารามิเตอร์ ความหมายบางอย่างเช่นนี้: special_execute() { # Some code # Here's the point where the command gets executed $@ # More code } special_execute echo "abc" ฉันพยายามแล้วผม$@, "$@", $*, "$*"วิธีการที่ฉันจะทำเช่นนั้น?

2
วิธีการส่งพารามิเตอร์เพื่อทำงานในสคริปต์ทุบตี?
ฉันต้องการเขียนฟังก์ชั่นที่ฉันสามารถโทรหาจากสคริปต์ที่มีตัวแปรต่าง ๆ มากมาย ด้วยเหตุผลบางอย่างฉันมีปัญหาในการทำเช่นนี้ ตัวอย่างที่ฉันอ่านเสมอใช้ตัวแปรทั่วโลก แต่นั่นจะไม่ทำให้โค้ดของฉันอ่านง่ายขึ้นเท่าที่ฉันเห็น ตัวอย่างการใช้งานที่ตั้งใจไว้: #!/bin/bash #myscript.sh var1=$1 var2=$2 var3=$3 var4=$4 add(){ result=$para1 + $para2 } add $var1 $var2 add $var3 $var4 # end of the script ./myscript.sh 1 2 3 4 ฉันลองใช้$1และในฟังก์ชั่น แต่หลังจากนั้นมันก็ใช้ทั่วโลกที่สคริปต์ทั้งหมดถูกเรียกจาก โดยทั่วไปสิ่งที่ฉันกำลังมองหาสิ่งที่ต้องการ$1, $2และอื่น ๆ แต่ในบริบทของท้องถิ่นของฟังก์ชั่น ฟังก์ชั่นทำงานในภาษาที่เหมาะสม

4
echo $ -1 แสดงอะไร
อะไรการส่งออกของecho $-1, echo $-2, echo $-3.. หมายความว่าอย่างไร ในหนึ่งในกล่อง Linux ของฉันมันแสดงให้ฉัน: echo $-1 imsBEl1 echo $-2 imsBEl2 และในอีกกล่อง Linux มันแสดง: echo $-1 himBH1 echo $-2 himBH2 พวกเขากำลังทำแผนที่ไปยังตำแหน่งหน่วยความจำบางอย่างหรืออย่างอื่น?
14 shell  echo  parameter 

2
เมื่อรันเชลล์สคริปต์เป็นไปได้หรือไม่ที่จะส่งพารามิเตอร์ตำแหน่งเฉพาะโดยไม่ต้องป้อนทั้งหมดตามลำดับ
ตัวอย่างเช่นถ้าฉันมีสคริปต์. / foo ที่ใช้พารามิเตอร์ 10 ตัวและฉันต้องการส่งผ่านพารามิเตอร์ที่ 8 เท่านั้น วิธีเดียวที่ฉันรู้วิธีการทำในปัจจุบันคือ: ./foo '' '' '' '' '' '' '' 'bar' มีวิธีที่ง่ายกว่า / ดีกว่า?

2
จะส่งตัวแปรไปยังสคริปต์ที่เปิดใช้งานรูทได้อย่างปลอดภัยได้อย่างไร
คำถามนี้เป็นคำถามทั่วไปและไม่เพียง แต่ใช้กับสถานการณ์ของฉันเท่านั้น แต่ ... ฉันมีเครื่องมือ busybox ขนาดเล็กที่ฉันต้องการให้ผู้ใช้ที่ไม่ใช่รูทสามารถรันสคริปต์เฉพาะกับสิทธิ์พิเศษของรูทได้ ตัวอย่างเช่นบางสิ่งบางอย่างเช่นสคริปต์ขนาดเล็กนี้เพื่อเปิดใช้งาน DHCP โดยที่ตัวแปรเดียว ( $1) เพื่อส่งเข้าสู่ cmdline (!!) คือชื่อโฮสต์ที่จะส่งออก: #!/bin/bash udhcpc -b -i eth0 -h $1 การเรียกใช้ udhcpc เช่นนี้ต้องใช้การเข้าถึงรูทดังนั้นฉันวางแผนที่/etc/sudoersจะแก้ไขเพื่อให้มีบรรทัดนี้: joe ALL = NOPASSWD: /path/to/enable_dhcp.sh ซึ่งควรเปิดใช้งาน "joe" เพื่อให้เรียกใช้สคริปต์นั้นได้อย่างง่ายดายด้วยสิทธิ์พิเศษของรูทเพียงแค่เรียกใช้: sudo /path/to/enable_dhcp.sh และไม่ถูกถามหารหัสผ่าน (ซึ่งเป็นสิ่งที่ฉันต้องการเนื่องจากฉันต้องการให้โจสามารถเขียนสคริปต์นี้ได้) ตอนนี้ .. ฉันรู้แล้ว (หรืออย่างน้อยฉันก็คิดว่า) การใช้$1สคริปต์ที่สามารถรันได้อย่างง่ายดายด้วยสิทธิ์พิเศษของรูทเป็นแนวคิดที่น่ากลัวเพราะคุณสามารถฉีดสิ่งที่คุณต้องการได้ ดังนั้น ... วิธีที่ดีที่สุดในการจัดการกับเรื่องนี้คืออะไร? ฉันจะปล่อยให้โจทำสิ่งที่ฉันต้องการด้วยสิทธิ์ของรูทอนุญาตให้เขาส่งผ่านตัวแปร (หรือทำอย่างนั้นได้อย่างมีประสิทธิภาพเหมือนกับตัวแปรสภาพแวดล้อม) ในขณะที่ไม่เปิดกว้างสำหรับการโจมตีแบบฉีด

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