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

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

1
ใน Bash แล้วถ้า [-z“ $ 1”] และถ้า [“ $ 1” =“”] เหมือนกันล่ะ
ในการสคริปต์เชลล์ Bash ความแตกต่าง (ถ้ามี) ระหว่างสองข้อความต่อไปนี้คืออะไร? 1. ) if [ -z "$1" ] 2. ) if [ "$1" = "" ] ฉันพบว่าตัวเองเขียนบทที่สองในบางบท แต่จากนั้นฉันอ่านที่นี่ว่าการใช้-zประสบความสำเร็จในสิ่งเดียวกัน หากมีปัญหาในการใช้อันที่สองเราควรเพิกเฉยที่อันแรกดูดีขึ้นเล็กน้อยหรือไม่

3
วิธีบันทึกเซสชันเทอร์มินัลทั้งหมดโดยอัตโนมัติด้วยยูทิลิตี้สคริปต์
สิ่งที่ฉันต้องการบรรลุคือสามารถบันทึกเซสชันเทอร์มินัลของฉันให้เป็นไฟล์โดยอัตโนมัติเมื่อใดก็ตามที่ฉันใช้ Yakuake / Konsole เป็นเรื่องง่ายที่จะประสบความสำเร็จหากเริ่มเซสชันของฉัน: script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log แต่ฉันต้องการเรียกใช้ข้างต้นโดยอัตโนมัติเมื่อใดก็ตามที่ฉันเริ่ม Yakuake หรือเปิดแท็บใหม่ การใช้. bashrc ไม่ทำงานเนื่องจากสร้างลูปไม่สิ้นสุดเนื่องจาก 'สคริปต์' เปิดเซสชันใหม่ซึ่งจะอ่าน. bashrc และเริ่มต้นอีก 'สคริปต์' และอื่น ๆ ดังนั้นฉันจึงต้องเขียนสคริปต์ Yakuake / Konsole เพื่อเรียกใช้ 'สคริปต์' ครั้งหนึ่งเมื่อเปิดแท็บใหม่ คำถามคืออย่างไร

7
ทางลัดไดเรกทอรีทุบตี
เมื่อฉันพิมพ์cd ~fooฉันต้องการทุบตีที่จะพาฉันไปยังไดเรกทอรีบางเป็นทางลัดสำหรับการพิมพ์เส้นทางไดเรกทอรีเต็มรูปแบบของfoo fooและฉันต้องการที่จะสามารถcp ~foo/bar.txt ~/bar.txtคัดลอกไฟล์จาก/foo/ไดเรกทอรีไปยังโฮมไดเร็กตอรี่ ... ดังนั้นโดยทั่วไปฉันต้องการบางสิ่งที่ทำงานได้ดีอย่างที่ต้องการ~/แต่ที่ฉันระบุสิ่งที่ไดเรกทอรีควรจะเป็น [ฉันแน่ใจว่าฉันควร jfgi แต่ฉันไม่รู้จะ fg]
28 bash 

9
สำหรับ vs find in Bash
เมื่อวนลูปผ่านไฟล์มีสองวิธี: ใช้for-loop: for f in *; do echo "$f" done ใช้find: find * -prune | while read f; do echo "$f" done สมมติว่าทั้งสองจะได้พบกับลูปในรายการเดียวกันของไฟล์สิ่งที่มีความแตกต่างในทั้งสองตัวเลือกในperfomanceและการจัดการ?

3
ฟังก์ชั่นทำงานเป็นกระบวนการย่อยใน Bash หรือไม่?
ในBash-Scripting Guide ขั้นสูงในตัวอย่างที่ 27-4 , 7-line จากด้านล่างฉันได้อ่าน: ฟังก์ชั่นทำงานเป็นกระบวนการย่อย ฉันทำการทดสอบใน Bash และดูเหมือนว่าข้อความข้างต้นผิด ค้นหาในไซต์นี้ Bash Man และเครื่องมือค้นหาของฉัน คุณมีคำตอบและต้องการอธิบายหรือไม่?
28 bash  process  function 

1
$ _ vs! $. อาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าและการเปลี่ยนเส้นทางผลลัพธ์
คำถามเกี่ยวกับตัวแปรพิเศษ เอกสารอธิบายว่า: !!:$ กำหนดอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า สิ่งนี้อาจสั้นลงถึง! $ ( $_ขีดล่าง) ที่การเริ่มต้นเชลล์ตั้งค่าชื่อพา ธ สัมบูรณ์ที่ใช้เพื่อเรียกใช้เชลล์หรือเชลล์สคริปต์ที่จะดำเนินการตามที่ส่งผ่านในสภาพแวดล้อมหรือรายการอาร์กิวเมนต์ จากนั้นขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้าหลังจากการขยาย นอกจากนี้ยังกำหนดเป็นชื่อพา ธ แบบเต็มที่ใช้เพื่อเรียกใช้คำสั่งแต่ละคำสั่งที่ดำเนินการและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น จะต้องมีความแตกต่างบางอย่างที่ฉันไม่สามารถจับได้เพราะ: $ echo "hello" > /tmp/a.txt $ echo "!$" echo "/tmp/a.txt" /tmp/a.txt $ echo "hello" > /tmp/a.txt $ echo $_ hello อะไรคือความแตกต่าง?

14
Bash script เพื่อแปลง * flac ทั้งหมดเป็น * .mp3 ด้วย FFmpeg?
ฉันต้องการแปลง * .flac ทั้งหมดเป็น * .mp3 ในโฟลเดอร์เฉพาะ นี่คือสิ่งที่ฉันได้ลอง แต่ไม่ได้ผล: # change to the home directory cd ~/music # convert all *.flac files ffmpeg -i *.flac -acodec libmp3lame *.mp3 # (optional: check whether there are any errors printed on the terminal) sleep 60 จะได้รับเป้าหมายของฉันได้อย่างไร

4
วิธีการ“ grep” สำหรับความยาวบรรทัดในช่วงที่กำหนด?
หมายเหตุ:คำถามนี้เป็นส่วนเติมเต็มของคำถาม & คำตอบ: วิธีการ "grep" สำหรับความยาวบรรทัด * ไม่ใช่ * ในช่วงที่กำหนด? ฉันต้องได้รับเพียงบรรทัดจาก textfile (wordlist, คั่นด้วยขึ้นบรรทัดใหม่) ที่มีช่วงความยาวต่ำสุดหรือเท่ากับ 3 อักขระ แต่ไม่เกินหรือเท่ากับ 10 ตัวอย่าง: INPUT: egyezményét megkíván ki alma kevesen meghatározó เอาท์พุท: megkíván alma kevesen คำถาม:ฉันจะทำสิ่งนี้ได้bashอย่างไร
28 bash  sed  grep  perl 

2
ความแตกต่างระหว่างเครื่องหมายเท่ากับเดียวและสองเท่า (=) ในการเปรียบเทียบเชลล์คืออะไร
อ่านว่าสำหรับการเปรียบเทียบสตริงภายในifเราจำเป็นต้องใช้วงเล็บสองตาราง =หนังสือบางเล่มกล่าวว่าการเปรียบเทียบที่สามารถทำได้โดย แต่มันใช้งานได้ดีด้วย==เช่นกัน #!/bin/bash a="hello" b="world" if [[ $a == $b ]];then echo "equal" fi มีความแตกต่างระหว่าง=และ==ในการเปรียบเทียบหรือไม่

4
วิธีดำเนินการ shellscript เมื่อฉันเสียบอุปกรณ์ USB
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Unix & Linux Stack Exchange อพยพ 6 ปีที่แล้ว ฉันต้องการรันสคริปต์เมื่อฉันเสียบอุปกรณ์ในเครื่อง Linux ของฉัน ตัวอย่างเช่นรันxinputบนเมาส์หรือ backupscript บนไดรฟ์บางตัว ฉันได้เห็นบทความจำนวนมากเกี่ยวกับเรื่องนี้ส่วนใหญ่เมื่อเร็ว ๆ นี้ที่นี่และที่นี่ แต่ฉันไม่สามารถทำงานได้ ต่อไปนี้เป็นตัวอย่างง่ายๆที่พยายามรับการตอบกลับอย่างน้อย /etc/udev/rules.d/test.rules #KERNEL=="sd*", ATTRS{vendor}=="*", ATTRS{model}=="*", ATTRS{serial}=="*", RUN+="/usr/local/bin/test.sh" #KERNEL=="sd*", ACTION=="add", "SUBSYSTEM=="usb", ATTRS{model}=="My Book 1140 ", ATTRS{serial}=="0841752394756103457194857249", RUN+="/usr/local/bin/test.sh" #ACTION=="add", "SUBSYSTEM=="usb", RUN+="/usr/local/bin/test.sh" #KERNEL=="sd*", ACTION=={add}, RUN+="/usr/local/bin/test.sh" KERNEL=="sd*", RUN+="/usr/local/bin/test.sh" KERNEL=="*", RUN+="/usr/local/bin/test.sh" /usr/local/bin/test.sh #!/usr/bin/env …
28 linux  bash  ubuntu  udev 

6
CTRL + C ไม่ถูกต้องที่จะใช้เพื่อกลับไปที่บรรทัดคำสั่งหรือไม่
เมื่อฉันใช้และฉันต้องการที่จะกลับไปยังเปลือกฉันมักจะใช้tail -f CTRL+Cหรือเมื่อฉันพิมพ์คำสั่งและรู้สึกอยากจะยกเลิกและเริ่มต้นใหม่ฉันแค่CTRL+Cกลับไปที่พรอมต์บรรทัดคำสั่งที่ว่างเปล่า นี่ถือว่าเป็นการปฏิบัติที่ไม่ดีหรือไม่? บางครั้งฉันรู้สึกว่าอาจจะมีวิธีที่ดีกว่าในการแยกตัวออกจากบางสิ่ง แต่จริงๆแล้วก็ไม่มีความคิด
27 linux  bash 

5
วิธีที่ดีกว่าในการยอมรับรูปแบบของ 'ใช่' จากเชลล์พรอมต์
การทดสอบการใช้งานเชลล์สคริปต์ที่ฉันเขียนพบว่าผู้คนมีความคาดหวังที่แตกต่างกันเกี่ยวกับวิธีตอบคำถามที่คาดหวังว่า 'ใช่' เป็นคำตอบ ดูการเปลี่ยนแปลงในตัวอย่างรหัสด้านล่าง แน่นอนว่าต้องมีวิธีที่ดีกว่าที่ฉันคิดไว้ ของคุณคืออะไรอ่านและรูปแบบสั้นใช้เวลากับเรื่องนี้? read -p 'Answer this question with yes: ' answer if [ "$answer" = 'Y' -o "$answer" = 'YES' -o "$answer" = 'Yes' -o "$answer" = 'y' -o "$answer" = 'yes' -o some-alternate-condition ]; then echo 'Surely this can be written better?' fi

3
“ ในขณะที่:;” หมายถึงอะไร
ฉันรู้ว่าwhileวงคืออะไร อย่างไรก็ตามฉันเพิ่งเห็นว่าทำงานกับ: while [condition] while ![condition] while TRUE (infinite loop) ในกรณีที่คำสั่งหลังจากที่whileจะต้องมีอย่างใดอย่างหนึ่งหรือTRUEFALSE มีคำสั่งเชลล์ builtin :ชื่อเป็น มันอธิบายเป็นคำสั่งหุ่นทำอะไร แต่ผมไม่ทราบว่ามันจะเหมือนกันที่นี่แม้ว่าจะสามารถหรือTRUE FALSEอาจจะเป็นสิ่งที่แตกต่างกัน แต่อะไรนะ?

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
ตรวจสอบความยาวของตัวแปร
ฉันจะตรวจสอบความยาวของตัวแปรที่อ่าน (สคริปต์ของฉันใส่ตัวอักษรได้ไม่เกินห้าตัว) ฉันคิดถึงสิ่งนี้: #!/bin/bash read string check=${#string} echo $check if [ $check -ge 5 ]; then echo "error" ; exit else echo "done" fi จะมีทางออกที่ "สง่างาม" มากขึ้น?
27 bash  shell  string 

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