ทำไม pwd ไม่ยอมรับตัวเลือกที่ยาวเช่น - ฟิสิคัล?


11

เมื่อฉันแสดงคู่มือสำหรับpwdคำสั่งมันบอกว่าตัวเลือกแบบยาวที่--physicalได้รับการสนับสนุน

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

อย่างไรก็ตามมันล้มเหลวเมื่อฉันพิมพ์ต่อไปนี้

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

เหตุใดตัวเลือกแบบยาวจึงไม่ทำงานสำหรับฉัน

ฉันใช้ RHEL 6.4 ไม่มีการกำหนดค่านามแฝงสำหรับ pwd ดูเหมือนว่าเป็น pwd มาตรฐาน:

$ which pwd
/bin/pwd

1
หน้าคู่มือใช้สำหรับยูทิลิตี้แบบสแตนด์อโลนซึ่งไม่ได้เป็นส่วนหนึ่งของการทุบตี
Thomas Dickey

7
ใช้typeแทนwhichเนื่องจากwhichคำสั่งเพียงแสดงให้เห็นว่าในขณะที่typeคำหลักที่แสดงให้เห็นว่า builtins นามแฝงฟังก์ชั่นและคำสั่ง (และเส้นทางคำสั่งถก) สำหรับรายละเอียดเพิ่มเติมดูเหตุใดจึงไม่ใช้“ อันไหน” จะใช้อะไรดี?
wjandrea

1
ในระบบของฉันman pwdมีบันทึกต่อไปนี้: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsที่ด้านล่างของDESCRIPTIONส่วน
Nykakin

คำตอบ:


26

bashมีคำสั่งในตัวpwdซึ่งเป็นสิ่งที่คุณใช้เมื่อคุณพิมพ์pwdลงในเชลล์ของคุณ

เพื่อให้ได้pwdตามที่อธิบายโดย manpage คุณจำเป็นต้องใช้กำลังของคำสั่งภายนอก คุณสามารถทำได้โดยการระบุเส้นทางแบบเต็มไปปฏิบัติการ ( /bin/pwdในกรณีของคุณ) หรือ prepending envก่อนบรรทัด: env pwdซึ่งเริ่มต้นenvคำสั่งที่สามารถใช้ในการเพิ่มการตั้งค่าเพื่อสิ่งแวดล้อม ( แต่ที่ไม่ได้ทำที่นี่) และจากนั้นenvจะเริ่มต้น คำสั่งที่ระบุ เช่นเดียวกับที่envไม่มีตัวบิวpwdด์ "ของจริง" /bin/pwdจะถูกดำเนินการ

ข้อได้เปรียบของ builtin pwdin bash ก็คือการbashติดตามไดเรกทอรีปัจจุบันดังนั้นการรับค่าจึงไม่มีค่าใช้จ่ายในขณะที่คำสั่งภายนอกจำเป็นต้องค้นหาผ่านระบบไฟล์เพื่อกำหนดเส้นทางซึ่งเป็น IO ที่เข้มข้นมากขึ้น


4
นั่นไม่ใช่วิธีที่คำสั่งภายนอกใช้งานได้จริง unix.stackexchange.com/a/413225/5132
JdeBP

BTW: คุณยังสามารถปิดการใช้งาน builtin เปลือก (อย่างน้อยในทุบตี) โดยenable -n pwd
derobert

@JdeBP มันเคยเป็นครั้งสุดท้ายที่ฉันดู (นานมาแล้ว :-)); และในขณะที่ใช้การgetcwd()เรียกระบบเคอร์เนลยังคงสำรวจระบบไฟล์ซึ่งทำได้ง่ายกว่าในพื้นที่เคอร์เนลเนื่องจากการเข้าถึงโครงสร้างข้อมูลที่เกี่ยวข้องเนื่องจากคำตอบที่เชื่อมโยงระบุไว้: "อย่างไรก็ตามโปรดสังเกตว่าแม้ใน FreeBSD และปฏิบัติการอื่น ๆ ระบบเคอร์เนลจะไม่ติดตามไดเรกทอรีทำงานด้วยสตริง "
wurtel

11

เอกสาร manpage /bin/pwdนั้น แต่เมื่อคุณเรียกใช้pwdคุณกำลังใช้เชลล์ในตัว ดูผลลัพธ์ของ

type pwd

built-in shell ของคุณpwdไม่รองรับตัวเลือกแบบยาว (ดูเอกสารประกอบเชลล์ของคุณเนื่องจากคุณใช้ Bash help pwdจะให้ข้อมูลสรุป)

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