Apa artinya "cd &"?

8

Saya tahu cara mengubah direktori dari terminal dengan mengetik

cd <directory>

tapi inilah skenarionya. Saya menggunakan terminal untuk membuka folder repositori git saya.

  • glennRepositori
    • glenn-remdroid-repository

Dengan struktur folder di atas, saya ingin beralih glenn-remdroid-repositorykarena itu adalah repositori saya dengan melakukan.

cd glennRepositories

Sebelum beralih di repositori glenn-remdroid, saya salah mengetik perintah

cd & 

bukannya cd *. Saya menggunakan cd *karena nama folder panjang untuk saya, maaf karena malas.

Ketika saya menjalankan cd &, terminal membalas

[1] 7519

Ketika saya mengeksekusi cd *ini sekarang terjadi

[1]+  Done                    cd  (wd: ~/glennRepositories)
(wd now: ~/glennRepositories/glenn-remdroid-repository)

Apakah ada yang cd &berarti dan hasilnya? Google tidak tahu pertanyaan saya :)

GLenn
sumber
1
Sesuatu yang tidak dapat ditemukan dengan Google adalah ogooglebar , neologisme Swedia.
Chloe
Ketika saya mengetik pertanyaan saya, hasil pencarian adalah tentang Compact disk. Tidakgoogleable :)
GLenn
3
"Saya menggunakan cd * karena nama folder itu panjang untuk saya, maaf karena malas". Cukup ketik cd <TAB>dan nama folder unik akan diperluas secara otomatis.
Bakuriu

Jawaban:

20

Dengan menulis &pada akhir baris perintah, Anda menginstruksikan shell Anda untuk mengambil pipeline perintah (dalam hal ini satu perintah) dan menjalankannya dalam sub-shell di latar belakang (tidak menunggu hasil). cdadalah bash builtin, tetapi itu tidak penting di sini. Itu tidak akan memengaruhi shell "induk" Anda dengan cara apa pun, jadi direktori kerja Anda tidak akan berubah.

[1] 7519

Baris ini melaporkan bahwa ada pekerjaan yang berjalan di latar belakang yang diidentifikasi oleh nomor 1 dan ID proses adalah 7519. Hal serupa akan dicetak jika Anda menjalankan mis. vimLalu tekan Ctrl+ Zuntuk menangguhkannya. Ketika proses selesai, shell tidak akan melaporkan hal itu sampai siklus pemrosesan berikutnya (mis. Tekan saja Returnsekali lagi) dan kemudian akan mencetak pekerjaan pembaruan daftar selesai.

Untuk keterangan lebih lanjut silakan baca man bashdan bagian JOB CONTROL.

Untuk referensi, pertanyaannya Mengapa exit &tidak berhasil? beruang beberapa kesamaan.

Miroslav Koškár
sumber
Apakah akhir pekerjaan dilaporkan langsung atau pada prompt berikutnya tergantung pada shell. Di fishdan zsh, itu dilaporkan langsung. Dalam bashdan shell POSIX lainnya atau (t) csh itu tergantung pada pengaturan notifyopsi (dinonaktifkan secara default) ( zshmenjadi shell seperti POSIX juga memiliki notifyopsi, tetapi tidak aktif secara default kecuali jika disuruh meniru shell lain)
Stéphane Chazelas
1

The &Operator mengirimkan proses untuk latar belakang; seperti yang cddapat dijalankan tanpa argumen Anda menjalankannya dan mengirimkannya ke latar belakang. Jika Anda mengambil halaman manual:

NAMA

cd - Ubah direktori kerja shell.

RINGKASAN

cd[ -L| -P] [ dir ]

DESKRIPSI

Ubah direktori kerja shell.

Ubah direktori saat ini menjadi DIR . DIR default adalah nilai HOMEvariabel shell.

Variabel CDPATHmenentukan jalur pencarian untuk direktori yang berisi DIR . Nama direktori alternatif CDPATHdipisahkan oleh tanda titik dua (:).
Nama direktori nol sama dengan direktori saat ini. Jika DIR dimulai dengan garis miring ( /), maka CDPATHtidak digunakan.

Jika direktori tidak ditemukan, dan opsi shell cdable_varsdiatur, kata tersebut diasumsikan sebagai nama variabel. Jika variabel itu memiliki nilai, nilainya digunakan untuk DIR .

Pilihan:

-Lmemaksa tautan simbolik untuk diikuti
-Pmenggunakan struktur direktori fisik tanpa mengikuti tautan simbolik

Standarnya adalah mengikuti tautan simbolis, seolah-olah -Lditentukan.

Status Keluar:

Mengembalikan 0 jika direktori diubah; bukan nol sebaliknya.

LIHAT JUGA

bash(1)

PENERAPAN

GNU bash, versi 4.1.5 (1) -release (i486-pc-linux-gnu)
Hak Cipta (C) 2009 Free Software Foundation, Inc.
Lisensi GPLv3 +: GNU GPL versi 3 atau lebih baru

Anda dapat melihat argumennya opsional. Begitu

cd &diproses sebagai cdlalu kirim ke latar belakang. Ketika cddipanggil tanpa argumen, pemrosesan tidak diperlukan. Jadi ia pergi ke latar belakang sebagai "selesai" (diproses).

Beberapa info tentang & The Bash &(ampersand) adalah operator kontrol bawaan yang digunakan untuk proses garpu. Dari halaman manual Bash, "Jika sebuah perintah diakhiri oleh operator kontrol &, shell mengeksekusi perintah di latar belakang dalam sebuah subkulit".

Jika masuk ke shell interaktif, proses ini diberi nomor pekerjaan dan PID anak ditampilkan. Nomor pekerjaan di bawah adalah satu.

bash$ sleep 30 &
[1] 3586

Perhatikan bahwa ketika suatu proses bercabang, PID anak disimpan dalam variabel khusus $!

bash$ echo $!
3586

Anda dapat menghentikan pekerjaan dengan nomor pekerjaannya seperti:

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$
vfbsilva
sumber
5
Tutup, tetapi tidak cukup. Pertama, bukan yang cddijalankan dan kemudian dikirim ke latar belakang. Proses latar belakang sebenarnya dibuat sebelum program berjalan dalam kasus perintah biasa; dalam kasus built-in, perilaku ini ditiru. Perintah dijalankan oleh proses latar belakang ini, menggantikannya. Kedua, cdtanpa argumen memang melakukan sesuatu: itu akan membawa Anda ke HOMEdirektori Anda . Tetapi, karena Anda telah memotongnya ke latar belakang, tidak ada efek dalam kasus ini.
Warren Young
@ WarrenYoung dari manpage dikatakan cd akan mengambil direktori home jika tidak ada nilai yang diberikan padanya. Setelah perubahan direktori berhasil bukankah itu menerima nilai $ pwd?
vfbsilva
1
Direktori kerja proses latar belakang saat ini akan terpengaruh, bukan Bash shell foreground.
Warren Young