~~
Kısayol olarak kullanabilmek için farklı bir dizine işaret etmek istiyorum . Onunla tam olarak aynı işlevlere sahip olmasını istiyorum ~
. Bunu nasıl yapabilirim?
~~
Kısayol olarak kullanabilmek için farklı bir dizine işaret etmek istiyorum . Onunla tam olarak aynı işlevlere sahip olmasını istiyorum ~
. Bunu nasıl yapabilirim?
Yanıtlar:
Aslında, bir yol var, bu harika bir yol değil, ama bir yol, haha!
/etc/passwd
Dosyanıza aşağıdakileri ekleyin :
~:x:1111:99:special Character user:/test:/sbin/nologin
yerine 1111
değiştirin mantıklı bir şey ile UID olarak /test
size mimik etmek ~~ istediğiniz dizine ile.
99
sistemimde, nobody
bunu kullanacak herhangi bir dosyada NO izinlerine sahip bir grup olduğundan emin olmak için bunu yaparsanız tavsiye ettiğim gruptur. Teorik /sbin/nologin
olarak kabuk olarak kullanılmamalı, ayrıca bir /etc/shadow
girişi olmayacak, bu yüzden bir şifresi olmayacak. Teorik olarak iyi olmalı, ancak bir şekilde hesap olarak giriş yapmanıza izin vermediğinden emin olun.
Bir yan not olarak: Hiçbir şekilde bunun iyi bir fikir olduğunu söylemiyorum, ancak istediğiniz işlevselliği başaracak.
DÜZENLEME: tamlık hatırına bu VarunAgw tarafından önerilmiş: Sen normal olarak kullanıcı eklemek olabilir useradd -s /sbin/nologin -N tmp
ve daha sonra değiştirmek /etc/passwd
ve /etc/shadow
kullanıcıyı değiştirmek tmp
için ~
ve konumunu değiştirmekhome directory
useradd 'tmp'
ve daha sonra değiştirmek tmp
ile~
shadow
giriş ile onu meşrulaştırma hakkında nasıl emin değilim ama hiçbir şifre gerçekten ek bir risk olarak ayarlanmış sürece varsayalım.
CDPATH'den yararlanabilir ve ~~
CDPATH bileşenlerinizden birine tam anlamıyla adlandırılmış bir dizin koyabilirsiniz .
Gönderen man bash
(ancak CDPATH bile kullanılabilir sh
)
Cd komutu için arama yolu. Bu, kabuğun cd komutu tarafından belirtilen hedef dizinleri aradığı iki nokta üst üste işaretli dizinlerin listesidir. Bir örnek değer ".: ~: / Usr" şeklindedir.
Bu yapmanıza izin verecektir cd ~~
.
vi ~~/someFile
Dizin ağacının herhangi bir yerinden gibi şeyler yapmak istiyorsanız ~~
, kabuğunuzu hacklemediğiniz sürece tam anlamıyla ısrar ediyorsanız şansınız kalmaz , ancak sihirli dizinlerinizi saklamak için değişkenleri veya ortam değişkenini kullanabilirsiniz. , Örneğin,$tilda/someFile
Ben gibi yolları ile erişilebilecek şekilde Genellikle benim ev dizininde içeride sık erişilen dosyaları kısaca adlandırılmış dizinleri koymak ~/b
veya ~/l
.
Doğal olarak, dizinleri genellikle dizinlere sembolik işaretlerle değiştirebilirsiniz.
Kabuğun ~
tilde genleşmesi çoğunlukla programlanabilir. Sondaki bağlamında bildirilen sistem kullanıcı adının kullanıcı dizinine (ve bu satırlar boyunca mükemmel bir çözüm zaten teklif edilmiştir) , $HOME
kabuk değişkeninin değerine ya da hiç olmamasına kadar genişler .
Yani:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Her $HOME
zaman değiştiririm ve bir işlevi sıfırlamak için kabuğumun ortam dosyasında tutarım:
home(){
HOME=~$USER
cd ~; pwd
}
~
Tilde değerini ana dizininize gönderme yapmayacak bir şekilde kullanmak istiyorsanız , bunu yapın . Sadece yeniden ata $HOME
. Bundan korkma. $HOME
diğerleri gibi bir kabuk değişkenidir.
Sahip olduğum başka bir öneri, @ PSkocik'in kullanımı hakkında mükemmel tavsiyesinde sadece hafif bir genişleme $CDPATH
. Bununla birlikte, bahsetmediği bir şey $CDPATH
, mevcut kabuk değerini hiç değiştirmeden satır içi kullanabilmeniz ve değiştirebilmenizdir $CDPATH
. Örneğin:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
zorunlu olarak bir kabuk yerleşiktir, ancak POSIX özel kabuk yerleşik değildir ve bu nedenle değerini bildirmek $CDPATH
geçerli kabuk değerini etkilemez. Eğer yukarıdaki gibi yaptığım $CDPATH
değeri sadece bir cd
komutun ortamı için değiştirilir ve daha sonra önceki değerine geri yüklenir. Yukarıdaki tekniği tarihin tamamlanmasıyla birlikte kullanıldığında en yararlı buluyorum. Yukarıdaki şeyi yapacağım, bir dizine geçeceğim, birkaç komut çalıştıracağım, daha sonra cd
komutuma geri dönüp başka bir yere taşımak için bir ya da iki yol parçasını geri alana kadar yukarı basacağım.
Şimdi bu iki kavramı birleştirirseniz, daha önce kullandığınız bir komutu bir sonraki kullanışınızda tamamen farklı bir şey ifade edebilirsiniz.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Bir bash işlevi olarak mükemmel çalışır:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
İşte biraz daha yaklaşan başka bir yaklaşım (Gereksinimlere yaklaşmadığımı biliyorum)
function ~~ { echo /test; }
Sonra birkaç karakter daha:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
o kadar iyi çalışmayacak, ya da vim ~~/foo.txt
, vb ...
CDPATH
, cd
davayı işlemek için değişkeni kullanırdım .
~
. Ve ~
bir komut gibi kullanılmaz.
CDPATH
.... CD dışındaki komutlar için çalışmıyor olmasıdır. IE yapabildin cd ~~
ya cd ~~/testdir1
ama yapamadımvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '