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

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

4
วิธีการเปลี่ยนชื่อหลายไฟล์ในไดเรกทอรีในเวลาเดียวกัน
ฉันมีไดเรกทอรีบอกว่า/var/tmp/abcมี 4 ไฟล์: 12345-ram-3e3r5-io9490-89adu9.csv 45434-dam-qwe35-to9490-43adu9.csv 11234-cam-yy3r5-ro9490-85adu9.csv 14423-sam-hh3r5-uo9490-869du9.csv ฉันต้องการเปลี่ยนชื่อไฟล์ CSV ทั้งหมด (ค้นหาไฟล์ทั้งหมด & เปลี่ยนชื่อไฟล์) ในวิธีที่สั้นที่สุด (อาจเป็นหนึ่งซับ) วิธีนี้: XXXXX-ram-3e3r5-io9490-89adu9.csv XXXXX-dam-qwe35-to9490-43adu9.csv XXXXX-cam-yy3r5-ro9490-85adu9.csv XXXXX-sam-hh3r5-uo9490-869du9.csv
12 shell  files  rename 

2
ออกจากเชลล์ด้วยทางลัด (ไม่พิมพ์ exit) ซึ่งปิดเซสชันอย่างถูกต้อง
ฉันใช้คำสั่ง ProxyJump สำหรับจำนวนเซสชัน ssh ที่ฉันใช้ทุกวันและสลับผู้ใช้จำนวนมากบนเซสชันเหล่านี้และต้องพิมพ์exit3 หรือ 4 ครั้งในแถวไม่สนุกเกินไป ฉันรู้ว่าnewline+ ~+ .เพื่อยุติเซสชัน ssh ฉันยังต้องตรวจสอบว่ามันจบลงด้วยความเป็นมิตรexitแต่คุณจะออกจากเซสชันทั้งหมดในเชลล์ปัจจุบันด้วยคำสั่งเดียวหรือทางลัดเช่นพิมพ์exit3 หรือ 4 ครั้งได้อย่างไร ในกรณีของฉันกลายเป็นสิ่งที่ครั้งเดียว?
12 bash  shell  session 

1
ค้นหาคำอธิบายใน man page สำหรับตัวแปรสภาวะแวดล้อมที่แสดงด้วยคำสั่ง env
ใน man pages ฉันจะหาคำอธิบายโดยละเอียดของตัวแปรสภาพแวดล้อมที่แสดงรายการเมื่อenvคำสั่งรันได้อย่างไร? ฉันลองแล้วman envแต่มันมีเพียงตัวอย่างเดียวสำหรับTZตัวแปรสภาพแวดล้อม

6
การเติมช่องว่างที่ต่อท้ายในสตริงด้วยอักขระอื่น
ฉันต้องการส่งออกhello worldมากกว่า 20 ตัวอักษร printf "%-20s :\n\n" 'hello world!!' # Actual output hello world!! : # Wanted output hello world!!========: อย่างไรก็ตามฉันไม่ต้องการใช้ช่องว่าง แต่ใช้ " = " แทน ฉันจะทำอย่างไร
12 bash  shell  string  printf 

3
ไวยากรณ์ที่ถูกต้อง“ $ {PS1-}” และแตกต่างจากธรรมดา“ $ PS1” อย่างไร
ฉันกำลังดูสคริปต์ที่มี: if [ "${PS1-}" ]; then การติดตามนั้นทำให้-ฉันรำคาญเล็กน้อยเพราะดูเหมือนว่าจะไม่ได้ Posix หรือ Bash ไวยากรณ์มาตรฐาน นี่คือไวยากรณ์ที่ซ่อนเร้นอยู่ตลอดกาลหรือเป็นตัวพิมพ์ผิด การอ้างอิงใด ๆ ถึงมาตรฐาน / เอกสารจะได้รับการชื่นชม ปกติฉันจะรหัสมัน if [ "$PS1" ]; then ข้อใดถูกกว่าหรือมีข้อแตกต่างระหว่างกัน

1
ฉันมี. bash_profile หลายชุดซึ่งเป็นชุดที่ใช้จริง (ถ้ามี)
ฉันคิดว่าในบางครั้งฉันทำให้ฉันสับสน.bash_profileและตอนนี้ฉันมีหลายอย่าง ฉันกำลังพยายามปรับแต่งเชลล์ของฉัน แต่ฉันไม่แน่ใจว่า.bash_profileจะใช้ถ้ามี ฉันคิดว่า.bashrcไฟล์ถูกใช้บ่อยกว่านี้ไหม? ฉันใช้ OSX - El Capitan ls -la | more total 480 -rw------- 1 Matthew staff 6404 Feb 16 23:57 .bash_history -rw-r--r-- 1 Matthew staff 719 Jan 19 20:18 .bash_profile -rw-r--r-- 1 Matthew staff 335 Oct 7 12:35 .bash_profile.macports-saved_2017-01-19_at_20:18:05 -rw-r--r-- 1 Matthew staff 167 Jul 16 2015 …
12 shell  bashrc 

1
ฉันจะหาเส้นทางแบบเต็มของโปรแกรมบนเส้นทางได้อย่างน่าเชื่อถือได้อย่างไร
ฉันต้องการค้นหาเส้นทางของโปรแกรมที่กำหนดในการPATHใช้เชลล์สคริปต์ เส้นทางที่จะต้องเป็นเส้นทางจริงเต็มรูปแบบของโปรแกรมซึ่งสามารถส่งผ่านต่อมาหนึ่งในexec*ฟังก์ชั่นที่ไม่ได้ค้นหาตัวเองเช่นPATHexecv มีโปรแกรมเช่นkillซึ่งมีให้เป็นโปรแกรมจริงและเชลล์ในตัวในเวลาเดียวกัน หากเป็นกรณีนี้ฉันต้องการเส้นทางแบบเต็มไปยังโปรแกรมจริง มีสาธารณูปโภคหลายอย่างที่สามารถหาโปรแกรมบนเป็นPATHตามที่ระบุไว้ในมาตรา 2.9.1.1 คำสั่งค้นหาและการดำเนินการของมาตรฐาน มีwhichซึ่งไม่ได้เป็นส่วนหนึ่งของมาตรฐานใด ๆ มันสามารถเป็นโปรแกรมปกติในบางระบบในขณะที่บางเชลล์ให้มันเป็น builtin ดูเหมือนว่าจะมีอยู่ในระบบและเชลล์ส่วนใหญ่ แต่เชลล์ที่มีเวอร์ชันในตัวก็แค่ส่งคืนชื่อของบิวด์อินแทนที่จะเป็นพา ธ ไปยังไฟล์ที่เรียกใช้งานได้ นอกจากนี้ยังไม่ได้มาตรฐานในทางใดทางหนึ่งและอาจส่งคืนผลลัพธ์ใด ๆ และใช้ตัวเลือกที่แตกต่างกัน bash# which kill /usr/bin/kill dash# which kill /usr/bin/kill fish# which kill /usr/bin/kill mksh# which kill /usr/bin/kill tcsh# which kill kill: shell built-in command. zsh# which kill kill: shell built-in command มีwhenceซึ่งเป็นในตัวของเปลือกหอยไม่กี่คน แต่ไม่สามารถใช้ได้กับกระสุนจำนวนมาก …
12 shell  path 

1
เหตุใดฉันจึงได้รับข้อความแสดงข้อผิดพลาดเมื่อพยายามดักจับสัญญาณ SIGINT
ฉันใช้งานสคริปต์ด้านล่างเพื่อดาวน์โหลดไฟล์จากเซิร์ฟเวอร์โดยอัตโนมัติโดยใช้ lftp มันทำงานยกเว้นว่าเมื่อมันทำงานฉันได้รับข้อความแสดงข้อผิดพลาด trap: SIGINT: bad trap ถ้าฉันแทนที่ SIGINT และ SIGTERM ด้วย INT และ TERM มันจะทำงานได้ แต่ฉันไม่รู้ว่ามันจะบรรลุวัตถุประสงค์เดียวกันหรือไม่ นี่คือบน Linux Debian 4.9.2-10 #!/bin/sh login="login" pass="password" host="server.server.com" remote_dir='~/remote/dir' local_dir="/local/dir" base_name="$(basename "$0")" lock_file="/tmp/$base_name.lock" trap "rm -f $lock_file" SIGINT SIGTERM if [ -e "$lock_file" ] then echo "$base_name is running already." exit else touch …
12 shell  trap 

1
ksh93 หลีกเลี่ยงการส้อมในการทดแทนคำสั่งได้อย่างไร
ป.ร. ให้ไว้ cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))' หอยมีแนวโน้มที่จะต้องทำให้ 2 ส้อมเพื่อให้มันเกิดขึ้น strace-f(){ strace -f "$@" 2>&1; }; for sh in dash bash zsh ksh; do printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c; done ยกเว้นkshอย่างกล้าหาญทำให้มันไม่ได้ฟอร์กครั้งเดียว: dash 2 bash 2 zsh 2 ksh 0 …

1
ไฟล์อะไรที่มา zsh
ฉันใช้ oh-my-zsh กับ zpretzo และฉันลืมไฟล์ zsh ไปเรื่อย ๆ ว่าเป็นแหล่งที่ฉันต้องการแก้ไข ฉันจะถามเชลล์ว่าไฟล์ต้นฉบับใดที่มาจากนั้น?
12 shell  zsh 

4
เพราะเหตุใดจึงไม่ได้มีการส่งข้อมูลนโยบายที่ฉลาด - แคช
ไม่เข้าใจสาเหตุ $ apt-cache policy foo N: Unable to locate package foo แต่ $ apt-cache policy foo 2>&1 | grep . มันว่างเปล่า. ฉันกำลังทำข้อสันนิษฐานผิด งานเดิม: ฉันต้องประมวลapt-cache policyผลเอาท์พุทน่าจะเป็น :-) UPD : fooใช้ในตัวอย่างของฉันอาจถูกแทนที่ด้วยชื่อแพคเกจใด ๆ ที่ไม่มีอยู่ในapt-getดัชนีของคุณ UPD 2 : มีคำตอบสำหรับวิธีแก้ปัญหา +50เงินรางวัลเพิ่มเติมจะมอบให้กับทุกคนที่อธิบายว่าทำไม2>&1โซลูชันไม่ทำงาน
12 shell  apt  pipe 

7
/ bin / dash: ตรวจสอบว่า $ 1 เป็นตัวเลขหรือไม่
อะไรจะเป็นวิธีที่ดีที่สุดในการตรวจสอบว่า $ 1 เป็นจำนวนเต็มใน / bin / dash หรือไม่ ในทุบตีฉันสามารถทำ: [[ $1 =~ ^([0-9]+)$ ]] แต่ดูเหมือนจะไม่เป็นไปตาม POSIX และ dash ไม่สนับสนุนสิ่งนั้น


2
ความแตกต่างของการเปลี่ยนเส้นทางระหว่าง &>> & กับ 2> & 1
ในเธรด SO นี้และเธรดอื่น ๆ ฉันเห็นคำสั่งต่อไปนี้สำหรับการเปลี่ยนเส้นทางstdoutและstderrไปยังไฟล์ พวกเขาทั้งหมดเทียบเท่าหรือไม่ มีความแตกต่างระหว่างพวกเขาหรือไม่? command1 >> logfile 2>&1 command &> logfile command >& logfile

3
ล้างหรือปิดใช้งานนามแฝงใน zsh
ฉันติดตั้ง oh-my-zsh เพื่อทำให้เทอร์มินัลใช้งานได้ง่ายขึ้นเล็กน้อย สิ่งหนึ่งที่ทำให้ฉันเป็นข้อผิดพลาดคือนามแฝงที่เพิ่มเข้ามาเช่น "ga", "gap", "gcmsg", "_" ซึ่งจำยากกว่าคำสั่งเดิมและทำให้ตารางแฮชคำสั่งสกปรก ดังนั้นมีวิธีการปิดใช้งานนามแฝงทั้งหมดหรือไม่ หรือวิธีล้างชื่อแทนทั้งหมดเพื่อให้ฉันสามารถใส่ไว้ในของฉันได้.zshrcอย่างไร
12 shell  zsh  alias  oh-my-zsh 

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