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

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

6
โคลนความเป็นเจ้าของและการอนุญาตจากไฟล์อื่นหรือไม่
มีคำสั่งหรือการตั้งค่าสถานะเพื่อโคลนความเป็นเจ้าของผู้ใช้ / กลุ่มและการอนุญาตในไฟล์จากไฟล์อื่นหรือไม่? ที่จะทำให้ perms และความเป็นเจ้าของที่แน่นอนของไฟล์อื่นได้หรือไม่

1
การอ้างอิงสองครั้งจำเป็นเมื่อใด
คำแนะนำเก่าที่ใช้ในการอ้างอิงสองครั้งนิพจน์ใด ๆ ที่เกี่ยวข้องกับ a $VARIABLE, อย่างน้อยถ้าใครอยากให้มันถูกตีความโดยเชลล์เป็นหนึ่งรายการเดียวมิฉะนั้นช่องว่างใด ๆ ในเนื้อหาของ$VARIABLEจะทิ้งเปลือก อย่างไรก็ตามฉันเข้าใจว่าใน shells รุ่นที่ใหม่กว่านั้นการอ้างสองครั้งไม่จำเป็นอีกต่อไป (อย่างน้อยก็เพื่อจุดประสงค์ที่อธิบายไว้ข้างต้น) ตัวอย่างเช่นในbash: % FOO='bar baz' % [ $FOO = 'bar baz' ] && echo OK bash: [: too many arguments % [[ $FOO = 'bar baz' ]] && echo OK OK % touch 'bar baz' % ls $FOO ls: …

7
จะรันคำสั่งโดยไม่กดปุ่ม Enter ได้อย่างไร
บังเอิญผมแมปEnterผ่านไปxkbsetPointer_button2 ตอนนี้ทุกครั้งที่ฉันกดEnterข้อความที่พูดพล่อยๆจะปรากฏขึ้น ฉันคิดถึงวิธีแก้ปัญหาที่เกี่ยวข้องกับการแมปใหม่อีกครั้ง แต่นั่นหมายความว่าฉันจะต้องเรียกใช้คำสั่งxmodmap -e "keycode 135 = Pointer_Button2"(หรือรหัสอื่นใดนอกจากนั้นEnter) แต่ฉันไม่สามารถที่จะเรียกใช้คำสั่งนี้ใน terminal, Enterไม่ต้องกดปุ่ม ฉันจะทำเช่นนั้นได้อย่างไร ฉันใช้ Ubuntu 12.04

30
การนำทางไดเรกทอรีอย่างรวดเร็วใน bash shell
ผมอยากจะบ่อยสลับไปมาระหว่างไดเรกทอรีที่อยู่ในเส้นทางที่ไม่เกี่ยวข้องกันโดยสิ้นเชิงเช่นและ/Project/Warnest/docs/~/Dropbox/Projects/ds/test/ แต่ฉันไม่ต้องการพิมพ์cd /[full-path]/ตลอดเวลา มีคำสั่งทางลัดเพื่อสลับไปยังไดเรกทอรีที่ใช้งานได้ก่อนหน้า ทางออกหนึ่งที่ฉันคิดได้คือการเพิ่มตัวแปรสภาพแวดล้อมให้bash .profileกับไดเรกทอรีที่ใช้บ่อยและcdเพื่อให้พวกเขาใช้ตัวแปรเหล่านั้น แต่มีวิธีอื่นในการนี้หรือไม่?

2
backticks (เช่น `cmd`) ในกระสุน sh ถูกเลิกใช้แล้วหรือยัง?
ฉันเคยเห็นความคิดเห็นนี้หลายครั้งใน Unix & Linux เช่นเดียวกับเว็บไซต์อื่น ๆ ที่ใช้วลี "backticks ได้รับการคัดค้าน" ด้วยความเคารพต่อเชลล์เช่น Bash & Zsh คำสั่งนี้เป็นจริงหรือเท็จ?

4
เครื่องหมายแอมเปอร์แซนด์หมายถึงอะไรในตอนท้ายของเชลล์สคริป
sh sys-snap.sh & คือshอะไร คือsys-snap.shอะไร ทำไมฉันถึงต้องวางไว้&ที่ท้ายบรรทัด? ทุกคนสามารถอธิบายไวยากรณ์ได้หรือไม่ โดยไม่ต้อง&สคริปต์ที่จะไม่กลับไปที่พรอมต์จนฉันกด+Ctrl Cด้วย&ฉันสามารถกด Enter และใช้งานได้
118 shell 

7
การใช้ตัวดำเนินการไม่เท่ากันสำหรับการเปรียบเทียบสตริง
ฉันพยายามตรวจสอบว่าPHONE_TYPEตัวแปรมีหนึ่งในสามค่าที่ถูกต้อง if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] || [ "$PHONE_TYPE" != "CISCO" ] then echo "Phone type must be nortel,cisco or nec" exit fi รหัสด้านบนใช้งานไม่ได้สำหรับฉันดังนั้นฉันจึงลองทำสิ่งนี้แทน: if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] || [ "$PHONE_TYPE" == "CISCO" ] then …

3
ทำไม“ echo” เร็วกว่า“ touch” มาก?
ฉันพยายามอัปเดตการประทับเวลาเป็นเวลาปัจจุบันของไฟล์ xml ทั้งหมดในไดเรกทอรีของฉัน (เรียกซ้ำ) ฉันใช้ Mac OSX 10.8.5 ในไฟล์ประมาณ 300,000 echoคำสั่งต่อไปนี้ใช้เวลา10 วินาที : for file in `find . -name "*.xml"`; do echo >> $file; done อย่างไรก็ตามtouchคำสั่งต่อไปนี้ใช้เวลา10 นาที ! : for file in `find . -name "*.xml"`; do touch $file; done ทำไมเสียงก้องเร็วกว่าการสัมผัสที่นี่มาก?
116 shell  command  echo 

5
ฉันสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังล็อกไฟล์และสร้างกระบวนการในเวลาเดียวกันได้หรือไม่?
ฉันสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังล็อกไฟล์และสร้างกระบวนการในเวลาเดียวกันได้หรือไม่? กล่าวอีกนัยหนึ่งฉันสามารถทำสิ่งนี้ได้ไหม nohup java -jar myProgram.jar 2>&1 > output.log & หรือว่าไม่ใช่คำสั่งทางกฎหมาย? หรือฉันต้องย้ายมันไปที่พื้นหลังด้วยตนเองเช่น: java -jar myProgram.jar 2>$1 > output.log jobs [CTRL-Z] bg 1
116 bash  shell  shell-script 

3
ฉันจะรันสคริปต์โลคัลบนเครื่องรีโมตและรวมอาร์กิวเมนต์ได้อย่างไร?
ฉันได้เขียนสคริปต์ที่ทำงานได้ดีเมื่อดำเนินการภายใน: ./sysMole -time Aug 18 18 อาร์กิวเมนต์"-time" , "Aug" , "18"และ"18"ถูกส่งผ่านไปยังสคริปต์ได้สำเร็จ ตอนนี้สคริปต์นี้ได้รับการออกแบบให้ทำงานบนเครื่องระยะไกล แต่จากไดเรกทอรีท้องถิ่นในเครื่องท้องถิ่น ตัวอย่าง: ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole ที่ยังใช้งานได้ดี แต่ปัญหาเกิดขึ้นเมื่อฉันพยายามที่จะรวมข้อโต้แย้งดังกล่าว(- เวลา 18 สิงหาคม 18)ตัวอย่างเช่น: ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole -time Aug 18 18 หลังจากรันสคริปต์นั้นฉันได้รับข้อผิดพลาดต่อไปนี้: bash: cannot set terminal process group (-1): Invalid argument bash: no job control …

14
ฉันจะทำซ้ำคำสั่งสุดท้ายโดยไม่ต้องใช้ปุ่มลูกศรได้อย่างไร
ฉันรู้ว่าฉันสามารถใช้Upเพื่อวนซ้ำคำสั่งก่อนหน้า การรันสุดท้ายคำสั่งเพียงเกี่ยวข้องกับ+Up Enterแต่ผมคิดว่าการซื้อแป้นพิมพ์แฮปปี้แฮ็กvimเป็นฉันใช้จ่ายมากของเวลาในการ แป้นพิมพ์นี้ไม่มีปุ่มลูกศรและวิธีเดียวที่ฉันรู้วิธีการทำงานประเภทนี้คือการกดCtrl+ Rและเริ่มทำซ้ำคำสั่งก่อนหน้าของฉัน มีวิธีง่าย ๆ ในการเลียนแบบUp+ Enterในเทอร์มินัล UNIX ที่ไม่มีปุ่มลูกศรหรือไม่?

3
ส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งไปยังสคริปต์ทุบตี
ฉันยังใหม่กับการเขียนโปรแกรมสคริปต์ทุบตี ฉันต้องการใช้สคริปต์ทุบตี 'deploymLog' ซึ่งยอมรับว่าเป็นอาร์กิวเมนต์สตริงหนึ่งชื่อ (ชื่อ) [root@localhost Desktop]# ./deploymLog.sh name ที่นี่ฉันต้องการผ่านอาร์กิวเมนต์สตริง (ชื่อ) ผ่านบรรทัดคำสั่ง ในฐานะที่เป็นขั้นตอนเริ่มต้นฉันต้องผนวกเวลาประทับปัจจุบันพร้อมกับสตริงอินพุตนี้ไปยังไฟล์บันทึกการพูดLogone.txtในไดเรกทอรีปัจจุบันในรูปแบบด้านล่าง: [name]=[System time timestamp1] เป็นไปได้อย่างไร
114 bash  shell  scripting 

11
ฉันจะรันคำสั่ง cron ด้วยตัวแปรสภาวะแวดล้อมที่มีอยู่ได้อย่างไร?
ฉันจะรันคำสั่ง cron ด้วยตัวแปรสภาวะแวดล้อมที่มีอยู่ได้อย่างไร? ถ้าฉันอยู่ที่พรอมต์เชลล์ฉันสามารถพิมพ์echo $ORACLE_HOMEและรับเส้นทาง ~/.profileนี้เป็นหนึ่งในตัวแปรด้านสิ่งแวดล้อมของฉันที่ได้รับการตั้งค่าในของฉัน อย่างไรก็ตามดูเหมือน~/.profileว่าไม่ได้โหลดสคริปต์ fron cron และสคริปต์ของฉันล้มเหลวเนื่องจาก$ORACLE_HOMEไม่ได้ตั้งค่าตัวแปร ในคำถามนี้ผู้เขียนกล่าวถึงการสร้าง~/.cronfileโปรไฟล์ที่ตั้งค่าตัวแปรสำหรับ cron แล้วเขาก็หาวิธีแก้ปัญหาเพื่อโหลดคำสั่ง cron ทั้งหมดของเขาลงในสคริปต์ที่เขาเก็บไว้ใน~/Cronไดเรกทอรีของเขา ไฟล์เช่น~/.cronfileเสียงดูเหมือนเป็นความคิดที่ดี แต่คำตอบที่เหลือดูเหมือนจะยุ่งยากเล็กน้อยและฉันก็หวังว่าจะมีคนบอกวิธีที่ง่ายกว่าในการได้รับผลลัพธ์เดียวกัน ฉันคิดว่าเมื่อเริ่มต้นสคริปต์ของฉันฉันสามารถเพิ่มสิ่งที่ชอบsource ~/.profileแต่ที่ดูเหมือนว่ามันจะซ้ำซ้อน ดังนั้นฉันจะทำให้สคริปต์ cron ของฉันโหลดตัวแปรจากโปรไฟล์ interactive-shell ได้อย่างไร

3
มีแบบแผนการตั้งชื่อตัวแปรในเชลล์สคริปต์หรือไม่
MY_VARIABLE=fooภาษาส่วนใหญ่จะมีการตั้งชื่ออนุสัญญาสำหรับตัวแปรสไตล์ที่พบมากที่สุดที่ฉันเห็นในเชลล์สคริปต์คือ นี่เป็นอนุสัญญาหรือเป็นเพียงตัวแปรส่วนกลางเท่านั้น สิ่งที่เกี่ยวกับตัวแปรท้องถิ่นสคริปต์?

7
การเปลี่ยนเส้นทาง stdout ไปยังไฟล์ที่คุณไม่ได้รับอนุญาตให้เขียน
เมื่อคุณพยายามแก้ไขไฟล์โดยไม่ได้รับอนุญาตให้เขียนคุณจะได้รับข้อผิดพลาด: > touch /tmp/foo && sudo chown root /tmp/foo > echo test > /tmp/foo zsh: permission denied: /tmp/foo Sudoing ไม่ได้ช่วยเพราะมันรันคำสั่งในฐานะ root แต่เชลล์จัดการการเปลี่ยนเส้นทาง stdout และเปิดไฟล์เหมือนคุณ > sudo echo test > /tmp/foo zsh: permission denied: /tmp/foo มีวิธีง่าย ๆ ในการเปลี่ยนเส้นทาง stdout ไปยังไฟล์ที่คุณไม่ได้รับอนุญาตให้เขียนนอกจากเปิดเชลล์เป็นรูทและจัดการไฟล์ด้วยวิธีนี้หรือไม่? > sudo su # echo test > /tmp/foo

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