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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

2
วิธีการใช้ ln -s เพื่อสร้างทางลัดบรรทัดคำสั่ง?
ฉันมีไฟล์ sh ที่ฉันต้องการที่จะสามารถเปิดได้จาก terminal ได้ตลอดเวลา ฉันต้องการพิมพ์ "studio" ใน terminal และเปิด android studio ฉันจำได้ว่าเคยใช้ln -sในการทำสิ่งนี้ แต่ฉันลืมและเสียเวลาไปกับการค้นหาเว็บแล้ว นอกจากนี้ลิงก์สัญลักษณ์ที่สร้างขึ้นเก็บไว้ในไดเรกทอรีใด? นี่คือไวยากรณ์จากความพยายามของฉันไม่พบคำสั่ง ricardo@debian:~$ ln -s /opt/android-studio/bin/studio.sh studio ricardo@debian:~$ studio bash: studio: command not found

3
เรียกสคริปต์สำหรับสคริปต์อื่น แต่อย่าออกจากพาเรนต์ถ้าลูกเรียกออก
first.sh: #! /bin/ksh echo "prova" . ./second.sh echo "ho lanciato il secondo" . ./third.sh echo "ho lanciato il terzo" second.sh: echo "sono nel secondo script" dosomething1 exit $? หากsecond.shตรวจพบข้อผิดพลาดและออกด้วยสถานะ -9 ให้first.shออกเสมอ ฉันจะหลีกเลี่ยงการออกจากเปลือกแรกได้อย่างไรถ้าเปลือกลูกออก? second.shฉันไม่สามารถแก้ไข

3
เปรียบเทียบส่วนหัวของสองไฟล์ใน bash
ฉันสามารถทำได้diff filea filebเพื่อดูความแตกต่างระหว่างไฟล์ ฉันสามารถทำได้head -1 fileaเพื่อดูบรรทัดแรกของ filea หรือ fileb ฉันจะรวมคำสั่งเหล่านี้เพื่อแสดงความแตกต่างระหว่างบรรทัดแรกของ filea และบรรทัดแรกของ fileb ได้อย่างไร
11 bash  shell  diff  head 

2
วิธีทำให้ตัวแปรจากเชลล์ย่อยพร้อมใช้งานในพาเรนต์เชลล์
ฉันได้เขียนสคริปต์ที่รวดเร็วและสกปรกเพื่อรายงานเวลาจากบริการเว็บ: BASE_URL='http://example.com/json/webservice/' FIRST=1 FINAL=10000 for report_code in $(seq 1 $FINAL); do (time -p response=$(curl --write-out %{http_code} --silent -O ${BASE_URL}/${report_code}) ) 2> ${report_code}.time echo $response # <------- this is out of scope! How do I fix that? if [[ $response = '404' ]]; then echo "Deleting report # ${report_code}!" rm ${report_code} …

4
ฉันจะทำให้เชลล์นามแฝงพร้อมใช้งานได้อย่างไรเมื่อ shelling จาก Vim
ในตัวฉัน.zshrcฉันประกาศนามแฝงบางอย่าง เช่นwhich dbstartแสดงเนื้อหาของนามแฝงนั้น ถ้าฉันเปิดเป็นกลุ่มจากเชลล์นั้นมันเป็นกระบวนการลูก :! some_commandในกลุ่มผมสามารถเรียกใช้คำสั่งเปลือก ถ้าฉันทำ:! echo $0เพื่อดูว่าเชลล์ Vim ใช้อะไรอยู่มันจะส่งเอาต์พุต '/ bin / zsh' อย่างไรก็ตามชื่อแทนของฉันไม่สามารถใช้งานได้ที่นั่น ฉันจะทำให้เชลล์ปกติของฉันพร้อมใช้งานได้อย่างไรเมื่อฉัน shell ออกจาก Vim สองความคิด: อย่างใดEXPORTนามแฝงจากเปลือกเดิมเพื่อกระบวนการของเด็กvimและอีกครั้งเพื่อดำเนินการเปลือกเด็ก กำหนดค่า Vim ให้อ่านของฉัน.zshrcเมื่อสร้าง subshells

1
กรองเนื้อหาคลิปบอร์ดโดยไม่ต้องใช้ไฟล์ระดับกลาง
ฉันกำลังพยายามแก้ไขข้อความที่อยู่ในคลิปบอร์ดลบบรรทัดบางบรรทัดที่มีสตริงบางส่วนแล้วรับผลลัพธ์สำหรับการจัดการเพิ่มเติม (ฉันชอบที่จะจัดการกับคลิปบอร์ดของฉันเฉพาะเมื่อต้องการเท่านั้น) ฉันกำลังคิดบางอย่างเช่นนี้: cat > swapfile ##Paste all grep -v string swapfile ## Read all rm swapfile ฉันพยายามป้องกันการสร้างไฟล์และทำทุกอย่างใน shell stdin / out เอง ฉันลองใช้ไพพ์การเปลี่ยนทิศทาง grep / sed จากอินพุต แต่ไม่มีผลต่อการพิมพ์อินพุตโดยไม่มีรูปแบบที่ไม่ต้องการ

3
ฉันจะเปิดไฟล์ทั้งหมดที่เป็นผลลัพธ์ของคำสั่ง ls ได้อย่างไร
ฉันต้องการเปิดไฟล์ข้อความทั้งหมดที่เป็นผลลัพธ์ของคำสั่ง ls โดยใช้โปรแกรมแก้ไขข้อความ ฉันจะทำสิ่งนี้ได้อย่างไร

1
มีข้อได้เปรียบอะไรบ้างในการระบุ './' ใน a for for loop โดยใช้ glob?
ผมก็รู้สึกว่ามันอาจจะปลอดภัยในการใช้เมื่อค้นหาไฟล์ที่ลงท้ายด้วย./*.fastq .fastqยกตัวอย่างเช่นจะป้องกันไม่ให้จับไฟล์./ .fastqเห็นได้ชัดว่ามันผิดอย่างที่แสดงในตัวอย่างด้านล่าง: TMP_DIR=$(mktemp --directory) mkdir -p ${TMP_DIR} (cd ${TMP_DIR} touch {a,b,c,}.fastq ls -a echo "" echo "# match all:" for f in *.fastq ; do echo "${f}" done echo "" echo "# with ./:" for f in ./*.fastq ; do echo "${f}" done ) rm -rf ${TMP_DIR} . .. …
10 bash  shell  wildcards 

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 …

2
พฤติกรรมที่แปลกประหลาดของ TR ใช้ช่วง
ฉันมีเซิร์ฟเวอร์หนึ่งที่แสดงพฤติกรรมแปลก ๆ เมื่อใช้ tr นี่คือตัวอย่างจากเซิร์ฟเวอร์ที่ใช้งานได้: -bash-3.2$ echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z] 1234567890 -bash-3.2$ นั่นทำให้รู้สึกที่สมบูรณ์แบบสำหรับฉัน อย่างไรก็ตามสิ่งนี้มาจากเซิร์ฟเวอร์ 'พิเศษ': [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z] abcdefghijklmnpqrstuvwxyz1234567890 อย่างที่คุณเห็นการลบอักขระตัวพิมพ์เล็กทั้งหมดล้มเหลว แต่มันได้ลบตัวอักษร 'o' ส่วนที่น่าสนใจคือสองตัวอย่างต่อไปนี้ซึ่งไม่สมเหตุสมผลกับฉันเลย: [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-n] opqrstuvwxyz1234567890 [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-o] abcdefghijklmnpqrstuvwxyz1234567890 [root@host~]# (อีกครั้งเครื่องหมาย 'o' จะถูกลบในตัวอย่างสุดท้าย) ไม่มีใครมีความคิดอะไรเกิดขึ้นที่นี่? ฉันไม่สามารถทำซ้ำในกล่อง linux อื่น ๆ ที่ฉันใช้

3
พฤติกรรมที่ไม่คาดหมายกับ echo [[: หลัก:]]
ฉันต้องการถาม: ทำไมecho {1,2,3}ขยายไป 1 2 3 ซึ่งเป็นพฤติกรรมที่คาดหวังในขณะที่echo [[:digit:]]ผลตอบแทน[[:digit:]]ในขณะที่ผมคาดว่ามันจะพิมพ์ตัวเลขทั้งหมดจาก0การ9?
10 shell  wildcards 

5
ความไวตัวพิมพ์เล็กในวงกลมแบบเหลี่ยมยึด
โดยปกติทุบตีทุบตีเป็นกรณี ๆ ไป: $ echo c* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo C* CarePackage.md ChocRippleCake.md Clips การใช้วงเล็บเหลี่ยมดูเหมือนจะไม่เปลี่ยนแปลงสิ่งนี้: $ echo [c]* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo [C]* CarePackage.md ChocRippleCake.md Clips มันยังคงไม่เปลี่ยนถ้าใช้ยัติภังค์: $ echo [c-c]* casefix.pike cdless chalices.py charconv.py …
10 bash  shell  wildcards  locale 

3
ตัวแปรเชลล์กับตัวแปรสภาพแวดล้อมใดที่ต้องการถ้าทั้งคู่มีชื่อเหมือนกัน?
พิมพ์ข้อความต่อไปนี้ใน Bash: env | grep USER และ set | grep USER ให้ชื่อผู้ใช้เดียวกันทั้งสองครั้ง ฉันจะรู้ได้อย่างไรเช่นเมื่อพิมพ์echo $USERถ้าเชลล์หรือตัวแปรสภาพแวดล้อมถูกแสดง?

2
การมอบหมายเป็นเหมือนคำสั่งที่มีสถานะการออกยกเว้นเมื่อมีการทดแทนคำสั่ง?
ดูตัวอย่างต่อไปนี้และผลลัพธ์ใน POSIX เชลล์: false;echo $?หรือfalse || echo 1:1 false;foo="bar";echo $?หรือfoo="bar" && echo 0:0 foo=$(false);echo $?หรือfoo=$(false) || echo 1:1 foo=$(true);echo $?หรือfoo=$(true) && echo 0:0 ตามที่ระบุไว้โดยคำตอบที่ได้รับการโหวตสูงสุดที่/programming/6834487/what-is-the-variable-in-shell-scripting : $? ถูกใช้เพื่อค้นหาค่าส่งคืนของคำสั่งที่เรียกใช้งานครั้งสุดท้าย นี่อาจเป็นความเข้าใจผิดเล็กน้อยในกรณีนี้ดังนั้นขอนิยาม POSIX ซึ่งอ้างถึงในโพสต์จากกระทู้นั้น: ? ขยายเป็นสถานะทางออกทศนิยมของไปป์ไลน์ล่าสุด (ดูที่ Pipelines) ดังนั้นดูเหมือนว่าการมอบหมายตัวเองนับเป็นคำสั่ง (หรือมากกว่าส่วนท่อ) ที่มีค่าศูนย์ทางออก แต่จะใช้ก่อนที่ด้านขวาของการมอบหมาย (เช่นการทดแทนคำสั่งเรียกในตัวอย่างของฉันที่นี่) ฉันเห็นว่าพฤติกรรมนี้เหมาะสมจากมุมมองเชิงปฏิบัติ แต่ดูเหมือนว่าฉันค่อนข้างผิดปกติที่งานมอบหมายจะนับตามลำดับนั้น อาจจะชัดเจนมากกว่านี้ทำไมมันแปลกสำหรับฉันลองสมมติว่าการบ้านเป็นหน้าที่: ASSIGNMENT( VARIABLE, VALUE ) แล้วfoo="bar"จะเป็น ASSIGNMENT( "foo", "bar" …

1
วิธีการเรียกใช้คำสั่งอัตโนมัติหลังจากออกจาก ssh
ฉันจะรันคำสั่งบนโลคัลเทอร์มินัลโดยอัตโนมัติหลังจากออกจากการsshเชื่อมต่อได้อย่างไร มีตะขอหรือเหตุการณ์ที่สามารถจัดการกับสิ่งนี้ได้หรือไม่?
10 bash  shell  ssh 

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