Dalam bash shell pada mesin MacOS, saya bisa melihat dengan mengetik ls
bahwa ada seorang sutradara Application Support
:
$ ls
Accounts FontCollections PreferencePanes
Application Scripts Fonts Preferences
Application Support GameKit Printers
Assistant Google PubSub
Assistants Group Containers Safari
Audio IdentityServices SafariSafeBrowsing
Caches Input Methods Saved Application State
Calendars Internet Plug-Ins Screen Savers
CallServices Keyboard Services
ColorPickers Keyboard Layouts Sharing
Colors KeyboardServices Sounds
Compositions Keychains Spelling
Containers LanguageModeling Suggestions
Cookies LaunchAgents SyncedPreferences
CoreFollowUp Library VirtualBox
Developer Logs Voices
Dictionaries Mail WebKit
F5Networks Messages com.apple.internal.ck
Family Metadata iMovie
Favorites Mobile Documents
FileProvider Passes
Namun, jika saya mencoba cd
ke dalam direktori ini menggunakan kutipan atau karakter melarikan diri seperti yang dijelaskan dalam Bagaimana cara cd ke direktori yang berisi spasi dalam namanya? , Saya masih mendapatkan kesalahan:
LM-SJN-21018636:Library kupeek$ cd "Application Support"
-bash: cd: Application: No such file or directory
LM-SJN-21018636:Library kupeek$ cd Application\ Support
-bash: cd: Application: No such file or directory
Sepertinya bash tidak 'mengambil' tanda kutip atau melarikan diri karakter dan malah mencari direktori yang disebut "Aplikasi". Adakah ide mengapa ini tidak berhasil?
macos
command-line
bash
shell
Kurt Peek
sumber
sumber
cd
itu ditulis dengan buruk. Apa tidakcommand -v cd
mencetak?command -v cd
dari komentar pertama seharusnyacommand -V cd
(modal V);type -a cd
juga harus bekerja.Jawaban:
Anda
cd
mungkin fungsi atau alias yang tidak didefinisikan dengan baik. Menjalankantype -a cd
untuk mencari tahu.Kemungkinan alias dijelaskan di jawaban lain ini . Jawaban saya berkonsentrasi pada fungsi shell.
Misalnya jika fungsi yang digunakan
command cd $*
(command
builtin menjelaskan sini ) ataucommand cd $@
ataucommand cd $1
bukannya benar
command cd "$@"
ataucommand cd "$1"
(tidak sebagus di atas, masih belum fatal)dan Bash Anda tidak melempar
too many arguments
(versi pra-4.4, lihat pertanyaan ini ), perilaku akan persis seperti yang Anda gambarkan karenaApplication Support
menjadi argumen tunggal untuk fungsi akan mengalami pemisahan kata di dalam fungsi itu sendiri, jadicommand cd
akan melihatApplication
sebagai argumen pertamanya.Jika Anda
cd
memang fungsi yang tidak didefinisikan dengan baik, Anda harus melacak tempat di mana ia didefinisikan dan memperbaikinya. Sebuah AD hoc solusi akan menambahkancommand
kata sebelumnyacd
, seperti ini:atau
(Ini juga akan berfungsi jika alias adalah pelakunya).
sumber
Coba gunakan lebih dari satu set kutipan,
misalnya tuliskan nama dalam tanda kutip tunggal dalam tanda kutip ganda:
"Argumen yang dilampirkan dalam tanda kutip ganda menyajikan dirinya sebagai satu kata, bahkan jika itu berisi pemisah spasi Panduan Script Bash Lanjutan
Menggunakan dua set tanda kutip (tanda kutip dalam tanda kutip) adalah solusi yang dapat dilakukan, dengan asumsi bahwa masalahnya adalah yang asli
cd
perintah telah alias. Definisi berikutakan mereproduksi masalah yang dilaporkan di sini (dalam versi Bash pra-4.4, lihat jawaban ini ). Itu terjadi
eval
mem-parsing baris perintah untuk kedua kalinya dan, pada pass pertama parsing, satu lapisan kutipan dihapus Menggunakan dua set tanda kutip bekerja karena, menghapus set tanda kutip pertama,eval
akan meneruskan argumen dengan set kutipan kedua kecd
.Jika alias demikian, solusi terbaik adalah memperbaikinya sejak awal.
sumber
Mungkin ada lebih banyak tempat kosong atau karakter tidak-cetak lainnya yang tidak Anda lihat. Mencoba
cd Application*Scrip*
atau serupa.sumber
-bash: cd: Application: No such file or directory
tidak-bash: cd: Application Support: No such file or directory
. Perintah tidak melihat seluruh string argumen di tempat pertama.JIKA anda
cd
bukan alias aneh, maka saya hanya akan menggunakan TAB dengan bash's autocomplete (jika diaktifkan) untuk mengisi format yang berfungsi untuk Anda.Mengetik
cd Ap TAB
Sepertinya itu harus mengisi otomatis ke sesuatu seperti
(Jika Anda memiliki alias cd aneh, maka tambahkan jawaban mengetik Kamil
command cd A...
harus bekerja dengan TAB juga)dan kemudian menunggu Anda untuk mengetik lebih banyak nama yang diinginkan (diikuti oleh yang lain TAB untuk melengkapi secara otomatis sisanya). Atau hanya mengetik TAB satu atau dua kali lagi akan menampilkan opsi yang tersedia.
(Saya juga tidak menggunakan polos
ls
tapils -la
atau mungkinls -1
alih-alih hanya melihat satu entri per baris, Andals
output tidak jelas)sumber
Application: No such file or directory
tidakApplication Support: No such file or directory
. Jika nama direktori pada baris perintah tidak cocok dengan nama sebenarnya,cd
masih akan mematuhi seluruh argumen yang salah. Saya tidak mengecilkan jawaban yang mungkin berlaku untuk masalah yang sangat mirip, masih saya perhatikan mereka tidak sepenuhnya cocok dengan masalah OP dan mereka tidak dapat menjelaskan akar dari itu.cd
rusak "), dan tab complete hanya disebutkan secara singkat dalam komentar, jadi jawaban yang lebih lengkap untuk" masalah judul "tampaknya tepat.Itu karena Anda kehilangan satu kata. Coba gunakan:
sumber
-bash: cd: Application: No such file or directory
tidak-bash: cd: Application Support: No such file or directory
. Perintah tidak melihat seluruh string argumen di tempat pertama.