Apakah `-` hanya digunakan dengan cd?


45

cd - dapat beralih antara direktori saat ini dan direktori sebelumnya.

Tampaknya saya telah melihat -digunakan sebagai argumen untuk perintah lain sebelumnya, meskipun saya tidak ingat apakah -artinya sama dengan cd.

Saya menemukan itu -tidak berhasil ls.

Apakah - hanya digunakan dengan cd?


8
Yang perlu diingat adalah bahwa itu cdadalah builtin, bukan perintah eksternal (juga tidak akan ada cara bahkan berfungsi sebagai satu). cd -dengan demikian merupakan fitur level shell.
— lembut

6
Saya menggunakan semua waktu git checkout -untuk beralih ke cabang sebelumnya
— wim

@ Fluffy: -Digunakan dengan builtin lain dengan cara yang sama?
— Tim

Untuk beberapa builtin penanganan direktori seperti pushd, ya. Kalau tidak, arti "direktori sebelumnya" bukanlah standar yang sangat berguna.
— lembut

1
Mungkin Anda memikirkan fitur '~ -' dari bash (yang ditafsirkan sebagai $ OLDPWD). Itu bisa digunakan dengan 'ls' dengan cara yang Anda gambarkan.
— abonet

Jawaban:


22

The POSIX pedoman sintaks utilitas (khusus # 13) menentukan bahwa untuk utilitas yang mengharapkan nama file untuk membaca dari, -berarti input standar, dan untuk utilitas yang mengharapkan nama file untuk menulis untuk, -berarti output standar. Misalnya, cat somefile -menyalin konten somefileke output standarnya, diikuti oleh apa yang dibacanya pada input standarnya.

Pedoman ini tidak berlaku untuk cdperintah karena tidak membaca atau menulis ke file. cdmelakukan sesuatu yang berbeda: argumennya -berarti "direktori sebelumnya". Perintah cd -ini setara dengan cd "$OLDPWD" && pwd. Perilaku ini khusus untuk cdperintah, dan untuk perintah yang terinspirasi langsung seperti pushd.

Perhatikan bahwa itu -adalah operan, bukan opsi. Hanya argumen yang dimulai dengan -dan bukan hanya pilihan -atau --opsi. Implikasi utama dari menjadi seorang operan adalah hal --itu tidak memengaruhi makna khususnya. Misalnya, cd -- -Pperubahan ke subdirektori yang dipanggil -P, tetapi cd -- -sama dengan cd -, tidak berubah menjadi direktori yang disebut -. Demikian pula, cat -- -tidak membaca dari file yang dipanggil -tetapi dari input standar.


46

-didefinisikan dalam Pedoman Sintaks POSIX Utility sebagai input standar:

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

Anda dapat melihat definisi ini untuk utilitas yang beroperasi dengan file untuk membaca atau menulis. cdbukan milik utilitas ini, jadi -dalam cd tidak mengikuti pedoman ini.

Selain itu, POSIX juga didefinisikan -memiliki arti tersendiri dengan cd :

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.

36

cd -sebenarnya adalah singkatan cd "$OLDPWD" && pwd, di mana $OLDPWDdiset setiap kali Anda mengubah direktori ke direktori yang baru Anda masuki.

Penanganan -tergantung pada aplikasi. Beberapa aplikasi digunakan -untuk menandakan STDIN, misalnya grep,awk

Aplikasi lain dapat digunakan -sebagai singkatan untuk apa pun yang mereka pilih, karena jawaban Michael menentukan, dengan su, -adalah singkatan--login


ya memang tidak ada aturan untuk itu.
— Kiwy

2
@ Kyiwy: Dengan POSIX, ada aturan untuk itu, lihat jawaban saya.
— cuonglm

Lebih tepatnya, ada aturan umum, tetapi ada banyak pengecualian. Ada juga banyak perintah yang ada sebelum aturan, atau implementasi lama yang belum diperbarui agar sesuai dengan aturan.
— Barmar

19

Meskipun Michael menyebutkan bahwa sudan aplikasi lainnya dapat menggunakan -berarti apapun yang mereka inginkan (dibaca dari stdin umum), Git tidak digunakan -dengan cara yang sama dengan bagaimana cdmelakukan , untuk mengubah cabang.

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master

18

Program apa pun dapat digunakan -sebagai argumen, untuk berarti apa pun yang mereka inginkan. Salah satu contoh umum adalah su, yang digunakan -sebagai singkatan untuk --login. Satu-satunya konvensi yang dapat saya pikirkan adalah bahwa program yang membaca dari file sering digunakan -untuk berarti "membaca dari stdin" , tetapi sepenuhnya tergantung pada program


Apakah ada konvensi standar atau tidak standar untuk menggunakan simbol khusus sebagai argumen?
— Tim

2

Menambahkan dua sen saya di sini. Saya menggunakan '-' untuk memberi tahu alat ps2pdf untuk membaca dari input standar, seperti yang disarankan beberapa orang sebelumnya:

man -t ls | ps2pdf - ls.pdf

One-liner di atas membuat versi pdf dari halaman manual untuk ls di direktori saat ini.
Semoga seseorang menemukan itu berguna :).


2

Sebagaimana dijawab oleh gnouc , -memiliki arti tersendiri dalam cd.

Namun, Anda dapat mereplikasi perilaku -di program lain menggunakan ~-. Sebagai contoh:

cd /etc
cd /
ls ~-             #lists the contents of the /etc directory
vim ~-/fstab      #opens the file /etc/fstab in vim
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.