Yeni takma ad şu tarihten sonra kullanılamaz;


9

Şimdiye kadar kabuktaki bir noktalı virgülün (bir şekilde) bir satır sonu ile aynı anlama sahip olduğunu düşündüm. Bu yüzden şaşırdım

alias <name>=<replacement text>; <name>

<name>bir sonraki satırda bilinirken bilinmemektedir. csh, tcsh, sh, kshVe bashaynı davranırlar. En azından cshtakma adın doğrudan kullanılması veya noktalı virgülden önce bir komut dosyasının kaynaklanıp kaynaklanmadığı önemli değildir - takma adlar sonra ;bilinmez, ancak sonraki komut satırında bilinir. Bu bir hata mı yoksa bu davranış mı amaçlanıyor?


"Kabuktaki noktalı virgülün (bir şekilde) bir satır sonu ile aynı anlama sahip olduğunu düşündüm . Pek değil!
Orbit'te Hafiflik Yarışları

1
Noktalı virgül ve satırsonu yorumu ayrıştırıcının nasıl çağrıldığına bağlıdır. "Nokta" komutu için, Bourne Kabuğu ayrıştırıcıya bazı durumlarda satırsonu ve noktalı virgülün eşit olarak işlenmesini söyleyen "NLFLG" ile çağırır, ancak bu başka bir yerde geçerli değildir. Genel olarak, noktalı virgül ve linebreak, noktalı virgülün sözdizimi hatasına neden olacağı bir linebreak yapabileceğiniz için eşdeğer değildir.
schily

Yanıtlar:


9

Kullandığınız takma ad sözdizimi bir POSIX kabuğu için uygun değil, bir POSIX kabuğu için şunları kullanmanız gerekir:

alias name='replacement'

Ancak tüm kabuklar için, takma ad değiştirme ayrıştırıcıda erken yapıldığı için bu işe yaramaz.

Takma ad kurulumunuz yürütülmeden önce, tüm satır ayrıştırıcı tarafından okunur ve bu nedenle komut satırınız çalışmaz.

Diğer ad bir sonraki komut satırında görünürse, çalışır.


Ayrıca, bazı mermiler takma adı beğenir yashveya zshgenişletmez shell -c 'alias name=replacement<newline>replacement'. AT&T için ksh, kaynaklı komut dosyalarında sorun yaşarsınız .
Stéphane Chazelas

Bu durumda csh kullanmam gerekiyor - sözdiziminde hiç =kullanılmıyor alias.
user3224237

@ user3224237 - bunun ile ilgisi yok =. Kabuk ilk satırı gördüğünde takma genişleme olur çünkü öyle önce sen takma tanımlar.
cas

@ Stéphane Chazelas "Kaynaklı" komut dosyalarıyla davranış, Bourne kabuğunun yürütülmeden önce bu dosyaları tamamen ayrıştırmasından kaynaklanır. Ksh, Bourne Shell kaynağına dayanır ve değiştirilmeyen her şey aynı şekilde davranır.
Schily

@schily, evet, bir bütün olarak zsh/yash -c 'code'nerede codeayrıştırıldığının aynı nedeni . Bourne mermisi için durum böyle görünmüyor. Sanırım Bourne mermisi codeher seferinde bir satır olduğunu ayrıştırıyor .
Stéphane Chazelas

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.