Yang berikut berperilaku sama di Fedora dan CentOS.
cd mydirectory
bekerja.
cd notadirectory
berfungsi (mendapat kesalahan dari Bash).
Namun,
cd `
memberi saya semacam prompt:
>
Tidak ada yang saya pikir untuk masuk memberikan tanggapan, itu hanya menuju ke baris berikutnya untuk meminta lagi. Saya cukup menggunakan CTRL+ Cuntuk keluar kembali ke root@localhost
.
Apa tujuan dari ini dan apa yang bisa dilakukan dengan itu?
Terima kasih!
>
soal backtick, karena itu juga bisa terjadi dalam situasi lainJawaban:
Apa yang Anda ketikkan adalah backtick - ini adalah awal instruksi untuk bash untuk mengevaluasi apa yang Anda ketikkan sebagai perintah. The
>
ditampilkan untuk menunjukkan Anda masih memasukkan perintah pada baris berikutnya.Jika Anda menutup backtick Anda akan menemukan seluruh perintah akan berjalan. Misalnya
sumber
cd `dirname \`which ls\``
= cd ke direktori tempat biner "ls" berada. (Yaitucd /bin
sejak itu/bin/ls
) [sunting: Fiuh, melarikan diri bahwa penurunan harga adalah KERAS]$()
untuk``
. Contoh Anda (ditambah kutipan yang benar) akan menjadicd "$(dirname "$(which ls)")"
jauh lebih tidak waras.$()
lebih dari backquotes.Jawaban JohnC sudah menjelaskan backtick. Tapi apa yang Anda juga ingin tahu adalah
>
prompt. Ini kelanjutan prompt, dan itu tidak hanya dipicu oleh backtick, tetapi selalu ketika shell Anda dengan jelas tahu Anda belum selesai memasukkan perintah. Contoh termudah adalah menempatkan kelanjutan garis eksplisit\
di akhir baris input (yang membantu memisahkan input panjang):Perhatikan bahwa sama seperti
PS1
mengontrol tampilan command prompt, Anda juga dapat mengaturPS2
untuk mengubah prompt lanjutan, misalnyaAda banyak alasan untuk kelanjutan ini terjadi. Backtick tunggal tidak lengkap, tetapi Anda juga bisa memasukkan sesuatu seperti
dalam satu baris (catatan samping: Disarankan untuk digunakan
$(
dan)
sebagai gantinya, karena tanda kurung memperjelas di mana ekspansi dimulai dan berakhir, sementara backtick tunggal membuatnya lebih sulit untuk melihat di mana seseorang hilang. Dan bersarang ...). Kemungkinan alasan lain untuk permintaan lanjutan:done
setelahwhile
ataufor
fi
setelahif
esac
setelahcase
(cd $HOME; cat .bashrc)
|
serta eksekusi kondisional||
dan&&
(tidak&
, karena itu hanya membuat perintah berjalan di latar belakang)'
atau"
)Anehnya, tanda kurung yang hilang
}
setelah ekspansi variabel${
juga menyebabkan prompt kelanjutan, tetapi akan gagal karena ruang yang dimasukkan:sumber
Ini berarti bahwa perintah Anda belum selesai. Bahkan, karakter backtick,,
`
digunakan untuk membatasi perintah inline.Contoh:
sumber
Backtick memulai / mengakhiri substitusi perintah. Shell membaca perintah di dalam backticks, menginterpretasikan hasilnya, dan menempatkan hasilnya ke dalam perintah. Misalnya:. ls
which cp
menghasilkan "yang cp" dieksekusi dan hasil dari perintah itu, yaitu, / bin / cp akan digunakan sebagai argumen ke perintah ls. Perilaku ini, bagaimanapun, sudah usang, mendukung substitusi perintah $ (cmd) yang lebih eksplisit dan mudah dibaca.Saat mengetik cd `Shell mengharapkan perintah untuk dieksekusi untuk mengikuti, dan, harus ditutup dengan backtick.
Dalam kasus ekspansi variabel menggunakan kawat gigi shell menyajikan prompt lanjutan karena kawat gigi tersebut dievaluasi secara leksikal sebelum ekspansi dilakukan.
sumber