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

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

3
ฉันจะบังคับให้ใช้คำสั่งในตัวอย่างชัดเจนและปลอดภัยได้อย่างไร
มีเป็นคำถามที่คล้ายกันที่เกี่ยวข้องกับ 'ตัด' สถานการณ์ที่คุณต้องการแทนที่เช่นcdมีคำสั่งที่เรียกใช้ cdbuiltin อย่างไรก็ตามในแง่ของ shellshock et al และเมื่อรู้ว่าทุบตีนำเข้าฟังก์ชั่นจากสภาพแวดล้อมฉันได้ทำการทดสอบสองสามครั้งและฉันไม่สามารถหาวิธีโทรหา builtin ได้อย่างปลอดภัยcdจากสคริปต์ของฉัน พิจารณาสิ่งนี้ cd() { echo "muahaha"; } export -f cd สคริปต์ใด ๆ ที่ถูกเรียกใช้ในสภาพแวดล้อมนี้cdจะใช้งานไม่ได้(พิจารณาถึงผลกระทบของสิ่งที่ชอบcd dir && rm -rf .) มีคำสั่งให้ตรวจสอบประเภทของคำสั่ง (เรียกว่าสะดวกtype) และคำสั่งสำหรับการดำเนินการรุ่น builtin แทนที่จะเป็นฟังก์ชั่น ( builtinและcommand) แต่แท้จริงและดูเถิดสิ่งเหล่านี้สามารถถูกแทนที่ด้วยการใช้ฟังก์ชั่นเช่นกัน builtin() { "$@"; } command() { "$@"; } type() { echo "$1 is a …
19 bash  security 

1
มีความแตกต่างระหว่างการเพิ่มคู่ค่าชื่อให้กับคำสั่งและการใช้ env ใน bash หรือไม่?
สมมติว่าผมเรียกA=B commandและในenv A=B command bashมีสถานการณ์ใดบ้างที่อาจมีความแตกต่างระหว่างการขอร้องทั้งคู่?

1
พบช่องโหว่ของ Shellshock Bash อย่างไร
เนื่องจากข้อผิดพลาดนี้ส่งผลกระทบต่อแพลตฟอร์มจำนวนมากเราอาจเรียนรู้บางอย่างจากกระบวนการที่พบช่องโหว่นี้: มันเป็นช่วงเวลาεὕρηκα (ยูเรก้า) หรือผลลัพธ์ของการตรวจสอบความปลอดภัยหรือไม่ เนื่องจากเรารู้ว่าStéphaneพบข้อผิดพลาดของ Shellshock และคนอื่น ๆ อาจรู้จักกระบวนการเช่นกันเราจึงสนใจในเรื่องราวของวิธีที่เขามาหาข้อผิดพลาด

5
ทำไมบางครั้งฉันถูกถามซ้ำ ๆ ด้วย“>” ในเครื่อง
เอาล่ะเมื่อฉันรันคำสั่งบางอย่างในทางที่ผิด (สะกดผิด ฯลฯ ) เทอร์มินัลจะแสดงผลลัพธ์ดังนี้: >แทนที่จะเป็นcomputername:workingfolder username$และเมื่อฉันพิมพ์ให้ป้อนมันจะเป็นดังนี้: > > > ถ้าฉันกด Enter 3 ครั้ง

5
มีวิธีบอก sudo เพื่อตั้งชื่อผู้ใช้ของฉันเป็นเจ้าของไฟล์ที่สร้างขึ้นแทนการรูทหรือไม่?
ถ้าฉันทำsudo cp /etc/foo.txt ~/foo.txtไฟล์ใหม่จะถูกสร้างขึ้นพร้อมกับrootเป็นเจ้าของ ตอนนี้ฉันไม่เห็นวิธีอื่นนอกเหนือจากการใช้คำสั่งสองคำสั่งสุดท้าย ( lsเพื่อชี้แจงกรณีการใช้งาน): belmin@server1$ ls /etc/foo.txt > -rw------- 1 root root 3848 Mar 6 20:35 /etc/foo.txt > belmin@server1$ sudo cp /etc/foo.txt ~/foo.txt belmin@server1$ sudo chown belmin: $_ ฉันต้องการ: ทำในsudoคำสั่งเดียว ไม่ต้องระบุผู้ใช้ปัจจุบันของฉัน (อาจใช้ตัวแปรหรือไม่)
19 bash  files  sudo 

3
ปิดใช้งานการเติมแท็บใน Bash สำหรับบางไดเรกทอรีที่มีไฟล์จำนวนมากหรือไม่
ฉันทำงานกับไฟล์จำนวนมากซึ่งฉันเก็บไว้ในไดเรกทอรี ทุกครั้งที่ฉันเข้าไปยังไดเรกทอรีนั้นและกดTabสองครั้งโดยไม่ได้ตั้งใจอาจใช้เวลานานเกินไป (อาจใช้เวลานานกว่าหนึ่งนาที) ในการแสดงไฟล์ที่ตรงกับรูปแบบและฉันก็ค่อนข้างรำคาญกับพฤติกรรมนี้ ตัวอย่างเช่นโครงสร้างไดเรกทอรีของฉันคือ: my-project/ ├── docs/ ├── data/ <---- contains around 200k files. └── analyser/ เนื่องจากฉันยังรักความสมบูรณ์อยู่มีการปิดใช้งานคุณลักษณะนี้เฉพาะในdata/ไดเรกทอรีหรือไม่ เช่นเดียวกับการหมดเวลาที่กำหนดไว้เป็นเวลา 5 วินาทีหรือสคริปต์ที่ปิดอัตโนมัติเมื่ออยู่ในไดเรกทอรีเฉพาะ

4
วิธีกำหนดค่าที่มีช่องว่างให้กับตัวแปรใน bash โดยใช้ eval
evalฉันต้องการที่จะแบบไดนามิกค่ากำหนดตัวแปรโดยใช้ ตัวอย่างตัวอย่างต่อไปนี้ใช้งานได้: var_name="fruit" var_value="orange" eval $(echo $var_name=$var_value) echo $fruit orange อย่างไรก็ตามเมื่อค่าตัวแปรมีช่องว่างevalส่งคืนข้อผิดพลาดแม้ว่า$var_valueจะอยู่ระหว่างเครื่องหมายคำพูดคู่: var_name="fruit" var_value="blue orange" eval $(echo $var_name="$var_value") bash: orange : command not found วิธีใดที่จะหลีกเลี่ยงสิ่งนี้
19 bash  shell  quoting 

3
ปัญหา readarray (หรือ pipe)
ฉันติดอยู่กับพฤติกรรมแปลก ๆ ของการreadarrayออกคำสั่ง man bashฯ : readarray Read lines from the standard input into the indexed array variable array แต่สคริปต์เหล่านี้ไม่ทำงาน (อาร์เรย์ว่างเปล่า): unset arr; (echo a; echo b; echo c) | readarray arr; echo ${#arr[@]} unset arr; cat /etc/passwd | readarray arr; echo ${#arr[@]} และงานเหล่านี้: unset arr; readarray arr < /etc/passwd …
19 bash  pipe 

4
ลำดับ bash '\ 033 [999D' หมายถึงอะไรและอธิบายไว้ที่ไหน
ฉันเจอลำดับ bash เช่น\033[999Dและ\033[2K\rที่ใช้ในการจัดการกับงานพิมพ์ใน terminal แต่ลำดับเหล่านี้หมายความว่าอย่างไร ฉันจะหารายการ / สรุปบนเว็บเพื่อช่วยค้นหาความหมายของลำดับเหล่านี้ได้จากที่ใด
19 bash  terminal 

9
ทดสอบว่ามีการตั้งค่าตัวแปรหลายตัว
ฉันต้องการตรวจสอบให้แน่ใจว่า ณ จุดหนึ่งของสคริปต์หลังจากsourceการตั้งค่าไฟล์ตัวแปรหลายตัวจะถูกตั้งค่าและหากไม่ใช่เพื่อหยุดการประมวลผลให้บอกผู้ใช้เกี่ยวกับตัวแปรที่หายไป ฉันเหนื่อย for var in $one $two $three ; do ... แต่ถ้ายกตัวอย่างเช่นไม่ได้ตั้งวงไม่เคยประหารชีวิต$two $twoสิ่งต่อไปที่ฉันลองคือ for var in one two three ; do if [ -n ${!var} ] ; then echo "$var is set to ${!var}" else echo "$var is not set" fi done แต่ถ้าทั้งสองไม่ได้ตั้งค่าฉันยังคงได้รับ "two ถูกตั้งค่าเป็น" แทนที่จะเป็น "two is …

5
ไปป์กำหนดตัวแปร
เพื่อความเรียบง่ายฉันต้องการทำ: echo cart | assign spo; echo $spo เอาท์พุท: รถเข็น มีassignแอปพลิเคชันดังกล่าวอยู่หรือไม่? ฉันตระหนักถึงวิธีทั้งหมดในการทำเช่นนี้โดยใช้การทดแทน
19 bash  variable 

4
ค้นหาคำสั่งก่อนหน้าด้วยคำนำหน้าเหมือนกันเมื่อฉันกดขึ้นที่ shell prompt
มาจากโลก FreeBSD ฉันต้องการที่จะทำให้ลินุกซ์เทอร์มิประพฤติเช่น FreeBSD หนึ่งโดยเฉพาะอย่างยิ่งรุ่น 9.1 โดยทั่วไปเมื่อคุณพิมพ์cdในขั้วและผลักดัน "ขึ้น" ลูกศรที่คุณสามารถเรียกดูคำสั่งทั้งหมดในประวัติศาสตร์ที่เริ่มต้นด้วยcdซึ่งจะทำให้คุณ ได้รับเวลามาก ฉันไม่ทราบวิธีการเปิดใช้งานคุณสมบัตินี้ใน Linux Debian หรือ CentOS ซึ่งบังคับให้ฉันพิมพ์ทั้งหมดคนสามารถช่วยได้

3
rsync ไฟล์บางไฟล์ไม่รวมส่วนที่เหลือโดยไม่สนใจ. svn / directory ซ้ำ
ฉันใช้rsyncเพื่อคัดลอกไฟล์บางไฟล์จากการแชร์ไปยังไฟล์อื่น ฉันจำเป็นต้อง: ลบไฟล์ที่ปลายทางที่ถูกลบออกจากจุดกำเนิด ซิงค์.phpและ.jsไฟล์เท่านั้น ยกเว้นไฟล์ประเภทอื่นทุกประเภท อย่าลบ.svn/ไดเรกทอรีที่ปลายทาง ถ้าฉันใช้สิ่งนี้: rsync -zavC --delete --include='*.php' --include='*.js' --exclude="*" \ /origin /destination จากนั้นrsyncจะไม่เรียกซ้ำเนื่องจากexclude="*"ไม่รวมไฟล์ทั้งหมด แต่ยังรวมถึงโฟลเดอร์ ถ้าฉันเพิ่ม--include="*/"แล้ว.svn/ไดเรกทอรีจะถูกลบ (รวมอยู่ด้วย) ฉันจะแก้ไขปัญหานี้ได้อย่างไร? uname -a: Linux tux 3.9.2-1-ARCH # 1 SMP PREEMPT Sat 11 พฤษภาคม 20:31:08 CEST 2013 x86_64 GNU / Linux rsync รุ่น: rsync 3.0.9-6

8
หลีกเลี่ยงการรอไม่ว่างในการทุบตีโดยไม่มีคำสั่ง sleep
ฉันรู้ว่าฉันสามารถรอเงื่อนไขที่จะกลายเป็นจริงในการทุบตีโดยทำ: while true; do test_condition && break sleep 1 done แต่จะสร้างกระบวนการย่อย 1 กระบวนการในการทำซ้ำแต่ละครั้ง (sleep) ฉันสามารถหลีกเลี่ยงพวกเขาโดยทำ: while true; do test_condition && break done แต่มันใช้ CPU เป็นจำนวนมาก (กำลังรอไม่ว่าง) เพื่อหลีกเลี่ยงกระบวนการย่อยและการรอคอยไม่ว่างฉันจึงตัดสินใจแก้ปัญหาดังกล่าว แต่ฉันพบว่ามันน่าเกลียด my_tmp_dir=$(mktemp -d --tmpdir=/tmp) # Create a unique tmp dir for the fifo. mkfifo $my_tmp_dir/fifo # Create an empty fifo for sleep by …

4
bash -e ออกเมื่อให้หรือ expr ประเมินเป็น 0
ฉันมี bash script ที่ตั้งค่า -e ดังนั้นสคริปต์จะออกจากสถานะการออกใด ๆ ! = 0 ฉันพยายามทำเลขคณิตพื้นฐานของเชลล์ที่กำหนดให้กับตัวแปรและบางครั้งนิพจน์มีค่าเท่ากับ 0 ซึ่งทำให้สถานะการออกของคำสั่ง let หรือ expr เป็น "1" นี่คือตัวอย่าง: #!/bin/bash -ex echo "Test 1" Z=`expr 1 - 1` || true echo "Z will print" let "A=4 - 4" echo "A WILL NEVER PRINT $A" Y=`expr 1 - 1` echo "Y …

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