Bildiğiniz gibi, takma ad
alias -g v='"$(xclip -selection c -o)"'
Çağrıldığında v
, kabuğun pano içeriği olarak adlandırılan bir komutu çalıştırmaya çalıştığı anlamına gelir . İlk kod parçanızda olan budur. Bununla birlikte, v
etkilerini çağırmak ve gözlemlemek yanıltıcıdır, çünkü bu küresel takma ad için amaçlanan kullanım , diğer komutların argümanı olmaktır.
Kişisel sed
düzgün komut ikamesi (kullanırsanız tabanlı çözüm çalışacak $(...)
) ve alıntı:
alias -g v='$(xclip -selection clipboard -o | sed '"'"'s|^file://||'"'"')'
Burada, xclip
panonun içeriğini sed
, file://
parçayı başında kaldıran borulara yönlendirir (desen bağlanır, not edin ^
). Komut dosyasında komut ayırıcı /
olarak sakınmak , onu daha okunaklı hale getirir ve düzende kaçma gereksinimini ortadan kaldırır .
Komut ikame işlemi, boru hattının çıktısının çağrıldığı yerde ikame edildiği anlamına gelir .s
sed
/
v
Daha sonra şu şekilde kullanabilirsiniz:
cp -- v /path/to/destination
Bunun v
, geçerli çalışma dizininde adlandırılmış bir dosya üzerinde işlem yapmayı zorlaştıracağına dikkat edin , çünkü hazır bilgi metni v
her zaman değiştirilecektir. Çözüm olarak, göreceli yolu kullanabileceksiniz ./v
.
(Ayrıca, bazı programların ön ekli olmayan tek harfli seçenekleri kabul ettiğini düşünün, örneğin mükemmel yasal (ancak POSIX dışı) ps v
. Tek harfli genel takma adları yalnızca güvenli değildir).
Ve son olarak, en az değil, böyle bir takma ad, adı boşluk karakterleri içeren dosyalarla çalışmaz, çünkü takma ad değiştirildikten sonra kabuk tarafından bölünürler.
Alternatif olarak, global bir takma addan kaçınabilir ve tanımlayabilirsiniz:
alias v="xclip -selection clipboard -o | sed 's|^file://||'"
hangi olarak kullanılabilir:
cp -- "$(v)" /path/to/destination
Bu aynı zamanda boşluk karakterli dosya isimleri ile de çalışacaktır.
Ancak şunu unutmayın:
- Thrig'in cevabında açıklandığı gibi kabuğun ikame yeteneklerinin kullanılması daha verimli olacaktır.
Dolphin tarafından görüntülenen ve panoya kopyalanan dosya adları kodlanmıştır ve bu nedenle nadir karakterler içerdiği sürece kabuk tarafından tüketilmeleri için uygun değildir. Örneğin:
touch $'file with a\nnewline'
# Copied in Dolphin
% echo "$(v)"
file with a%0Anewline
% cat "$(v)"
cat: '/path/to/file with a%0Anewline': No such file or directory
ls
olduğumda, termianl komutunu çalıştırdığımda , başlangıç ve bitiş gibi tek bir alıntı gösterecektir'abc wasd'
. Ve şimdi'abc wasd'
panoya kopyaladıktan sonra , nasıl çalıştırabilirim? Yanıtınızı, unix.stackexchange.com/a/104887/232089’dan sonra alias -gv = '$ {"$ (xclip -selection c -o)" // \ "#dosya: //}' olarak değiştirdim . işe yaramadı