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

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

2
bash-builtins 'set' และ 'export' ทำอะไรได้บ้าง
ฉันมีการสูญเสียเล็กน้อยตามวัตถุประสงค์setและexportใน Bash (และฉันก็เดาว่าอาจเป็นหอยอื่นด้วย) ฉันคิดว่ามันเป็นการตั้งค่าตัวแปรสภาพแวดล้อม แต่สามารถทำได้ด้วยVARIABLE=VALUEใช่ไหม พิมพ์setและexportแสดงค่าที่แตกต่างด้วยตัวเอง ดังนั้นวัตถุประสงค์ของพวกเขาคืออะไร?
46 bash  shell 

1
การทดแทนตัวแปรที่มีเครื่องหมายอัศเจรีย์ใน bash
ฉันมีบรรทัดต่อไปนี้ในไฟล์สคริปต์ bash .cfg ของฉัน DDF_SOURCE="siebel_DATA_DATE_FORMAT" DATA_DATE_FORMAT=${!DDF_SOURCE} วิธีการคือ${!DDF_SOURCE} ประเมิน? มันคง!siebel_DATA_DATE_FORMATไม่สมเหตุสมผลสำหรับฉัน

2
รีสตาร์ท bash จากเทอร์มินัลโดยไม่ต้องรีสตาร์ทแอปพลิเคชั่นเครื่อง (mac)?
ฉันได้ดูรอบ ๆ เพื่อตอบคำถามนี้ แต่ฉันดูเหมือนจะไม่พบ (ซึ่งแปลก) คำถามของฉันคือมีวิธีง่าย ๆ ในการรีสตาร์ทเซสชัน bash จากภายในเทอร์มินัลบน mac ฉันต้องการพฤติกรรมแบบเดียวกับที่ฉันปิดแอปพลิเคชั่นเทอร์มินัลและเริ่มต้นใหม่อีกครั้ง (ตัวแปรทั้งหมดรีเซ็ต, .bash_profile แหล่งที่มา ฯลฯ ) ฉันรู้วิธีแหล่ง. bash_profile แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ หนึ่งในเหตุผลที่ฉันต้องการทำเช่นนี้เป็นเพราะปลั๊กอินสำหรับพรอมต์ทุบตีของฉันมีรหัสที่ป้องกันไม่ให้สีโหลดหลายครั้ง ดังนั้นการจัดหา. bash_profile จะไม่โหลดตัวแปรสีอีกครั้งและฉันต้องรีสตาร์ทแอปพลิเคชันเทอร์มินัลเพื่อรับผลการเปลี่ยนแปลง
46 bash  shell 

2
ปิดใช้งานการปิดหน้าต่าง CTRL-D ในเทอร์มิเนเตอร์ (เทอร์มินัลอีมูเลเตอร์)
ฉันมักจะเข้าสู่ระบบผ่านช่วง SSH หลายครั้ง ในการออกจากระบบของฉันฉันกดCTRL+ dจนกระทั่งฉันกลับไปที่เครื่องท้องถิ่น อย่างไรก็ตามบางครั้งฉันกดหลายครั้งเกินไปและเทอร์มินัลของฉันออก มีวิธีการปิดกั้นCTRL+ dจากการปิดสถานีของฉันหรือไม่? ฉันใช้ terminator เป็นโปรแกรมจำลองเทอร์มินัล

3
ใช้การส่งออกใน. bashrc
ฉันสังเกตเห็น.bashrcว่ามีบางบรรทัดexportอยู่ข้างหน้าพวกเขาเช่น export HISTTIMEFORMAT="%b-%d %H:%M " ... export MYSQL_HISTFILE="/root/.mysql_history" ในขณะที่คนอื่นไม่เช่น HISTSIZE=100000 ผมสงสัยว่าถ้าครั้งแรกนี้ถูกต้องและสองสิ่งที่เป็นกฎสำหรับการใช้ในexport.bashrc

6
วิธีสร้างลำดับด้วยเลขศูนย์นำหน้าโดยใช้การขยายรั้ง
เมื่อฉันใช้สิ่งต่อไปนี้ฉันได้รับผลลัพธ์ตามที่คาดไว้: $ echo {8..10} 8 9 10 ฉันจะใช้การขยายรั้งนี้ในวิธีที่ง่ายเพื่อให้ได้ผลลัพธ์ต่อไปนี้ได้อย่างไร $ echo {8..10} 08 09 10 ตอนนี้ฉันสามารถใช้สิ่งนี้ได้seq(ไม่ลอง) แต่นั่นไม่ใช่สิ่งที่ฉันกำลังมองหา ข้อมูลที่มีประโยชน์อาจเป็นได้ว่าฉันถูก จำกัด รุ่น bash นี้ (หากคุณมีzshวิธีแก้ไข แต่ไม่มีbashวิธีแก้ไขโปรดแชร์ด้วย) $ bash -version GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)

5
รายการที่ซ้ำกันใน $ PATH มีปัญหาหรือไม่
ฉันแหล่ง bashrc ของเพื่อนของฉันไม่กี่คน ดังนั้นฉันเลยจบลงด้วยการมีรายการซ้ำในตัวแปร $ PATH ของฉัน ฉันไม่แน่ใจว่านี่เป็นปัญหาสำหรับคำสั่งที่ใช้เวลานานในการเริ่มต้นหรือไม่ $ PATH ภายในทำงานอย่างไรในการทุบตี? การมี PATHS มากขึ้นจะทำให้เวลาเริ่มต้นของฉันช้าลงหรือไม่
45 bash  path 

2
วงเล็บถูกตีความที่บรรทัดคำสั่งอย่างไร
ในขณะที่อ่านวิธีการตั้งค่าgrubฉันเจอบทความที่อ้างว่าฉันต้องใช้หนึ่งในสองไวยากรณ์ต่อไปนี้ echo \(hd0,0\) >> /boot/grub/grub.conf หรือ echo '(hd0,0)' >> /boot/grub/grub.conf เพราะที่บรรทัดคำสั่งวงเล็บจะถูกตีความในลักษณะพิเศษ มีอะไรพิเศษเกี่ยวกับวงเล็บ? พวกเขาตีความอย่างไร
45 bash  shell  quoting 

1
ทำไมไม่ส่งออกตัวแปรในบรรทัดเดียวกับที่คุณกำหนดไว้
จากอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้าคืออะไร? shellcheck บอกให้คุณไม่ส่งออกตัวแปรในบรรทัดเดียวกับที่คุณกำหนด ฉันสงสัยว่าทำไม ไม่คำแนะนำที่เดียวกันนำไปใช้กับalias, declare, export, local, readonlyและtypeset?
44 bash 

8
สคริปต์เพื่อเปลี่ยนไดเรกทอรีปัจจุบัน (cd, pwd)
ฉันต้องการเรียกใช้สคริปต์เพื่อเปลี่ยนไดเรกทอรีการทำงานปัจจุบัน: #!/bin/bash cd web/www/project แต่หลังจากที่ฉันเรียกใช้แล้ว pwd ปัจจุบันยังคงไม่เปลี่ยนแปลง! ฉันจะทำสิ่งนั้นได้อย่างไร


7
ค้นหาไฟล์ในหลายชื่อโฟลเดอร์
ฉันพยายามที่จะรายการไฟล์ทั้งหมดจากdir1, dir2, dir3และdir4ซึ่งอาจจะเป็นที่ใดก็ได้ในเป็นไดเรกทอรีย่อยของฉันcwdโดยใช้findคำสั่ง ฉันพยายามต่อไปนี้โดยไม่ประสบความสำเร็จ: find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+' ฉันพยายามposix-extendedเช่นกัน ฉันจะแสดงรายการไฟล์เหล่านี้ได้อย่างไร

1
ค้นหาไฟล์ที่ไม่มีนามสกุล
สมมติว่าฉันมี: foo.txt bar baz.ooo ถ้าฉันใช้ls -1 !(*.*)แล้วฉันจะได้รับbarผล เยี่ยมมากตอนนี้ฉันต้องการได้ผลลัพธ์เหมือนกันกับการค้นหา - บางอย่างfind -regexที่สามารถทำงานได้ บันทึก: find -name !(*.*)ไม่ใช่คำตอบ!(*.*)ในขณะที่มันยังคงเป็นรูปกลมของ Bash ซึ่งฉันไม่สามารถใช้ได้
43 bash  shell  find  wildcards 

5
ทำไมเชลล์แบบโต้ตอบบนเชลล์ล็อกอินของ OSX เป็นค่าเริ่มต้น
ใน Linux และตามความรู้ของฉันระบบ Unix ทั้งหมดเทอร์มินัลอีมูเลเตอร์รันเชลล์แบบโต้ตอบและไม่ล็อกอินตามค่าเริ่มต้น ซึ่งหมายความว่าสำหรับทุบตีเปลือกเริ่มต้นจะ: เมื่อเชลล์เชิงโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มทำงาน bash จะอ่านและดำเนินการคำสั่งจาก/etc/bash.bashrcและ~/.bashrcถ้ามีไฟล์เหล่านี้อยู่ สิ่งนี้อาจถูกยับยั้งโดยใช้ --norc ตัวเลือก --rcfile ตัวเลือกไฟล์จะบังคับทุบตีอ่านและรันคำสั่งจากไฟล์แทนและ/etc/bash.bashrc~/.bashrc และสำหรับล็อกอินเชลล์: เมื่อ bash ถูกเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบหรือเป็นเชลล์ที่ไม่มีการโต้ตอบพร้อมกับ--loginตัวเลือกมันจะอ่านและเรียกใช้คำสั่งจากไฟล์/etc/profileก่อนหากไฟล์นั้นมีอยู่ หลังจากที่ได้อ่านแฟ้มที่จะมองหา~/.bash_profile, ~/.bash_loginและ~/.profileในลำดับที่และอ่านและรันคำสั่งจากคนแรกที่มีอยู่และสามารถอ่านได้ --noprofileตัวเลือกที่อาจจะนำมาใช้เมื่อเปลือกจะเริ่มต้นในการยับยั้งการทำงานนี้ บน OSX อย่างไรก็ตามเชลล์เริ่มต้น (ซึ่งเป็น bash) เริ่มต้นในเทอร์มินัลเริ่มต้น (Terminal.app) จริง ๆ แล้วแหล่งที่มา~/.bash_profileหรือ~.profileอื่น ๆ กล่าวอีกนัยหนึ่งมันทำหน้าที่เหมือนเปลือกเข้าสู่ระบบ คำถามหลัก : เหตุใดเชลล์การโต้ตอบเริ่มต้นคือเชลล์การเข้าสู่ระบบบน OSX เหตุใด OSX จึงเลือกทำเช่นนี้ ซึ่งหมายความว่าทุกคำแนะนำ / แบบฝึกหัดสำหรับสิ่งเปลือกตามที่กล่าวถึงการเปลี่ยนแปลงในสิ่งที่~/.bashrcจะล้มเหลวใน OSX ~/.profileหรือในทางกลับกันสำหรับ ถึงกระนั้นในขณะที่ข้อกล่าวหาจำนวนมากสามารถปรับระดับได้ที่ Apple การจ้าง devs ที่ไร้ความสามารถหรืองี่เง่าไม่ได้เป็นหนึ่งในนั้น …
43 bash  osx 

4
เน้นคำสั่งและไวยากรณ์น้อยลง
ฉันจำเป็นต้องใช้less commandกับการเน้นไวยากรณ์ของคำสั่งที่เป็นกลุ่มสำหรับpython, C, bashและภาษาอื่น ๆ ฉันจะใช้สีที่เน้นสีซินแท็กซ์ตามvimสีได้less commandอย่างไร

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