Saya ingin ~~
menunjuk ke direktori yang berbeda sehingga saya dapat menggunakannya sebagai jalan pintas. Saya ingin memiliki fungsi yang persis sama ~
. Bagaimana saya bisa melakukan ini?
Saya ingin ~~
menunjuk ke direktori yang berbeda sehingga saya dapat menggunakannya sebagai jalan pintas. Saya ingin memiliki fungsi yang persis sama ~
. Bagaimana saya bisa melakukan ini?
Jawaban:
Sebenarnya, ada cara, ini bukan cara yang hebat, tapi itu jalan, haha!
Tambahkan yang berikut ke /etc/passwd
file Anda :
~:x:1111:99:special Character user:/test:/sbin/nologin
ganti 1111
sebagai UID dengan sesuatu yang masuk akal, ganti /test
dengan direktori yang Anda inginkan ~~ untuk ditiru.
99
pada sistem saya adalah nobody
grup yang saya sarankan jika Anda melakukan ini untuk memastikan itu adalah grup tanpa izin pada file apa pun yang akan pernah digunakan. Secara teoritis dengan /sbin/nologin
sebagai shell, seharusnya tidak dapat digunakan, itu juga tidak akan memiliki /etc/shadow
entri sehingga tidak akan memiliki kata sandi. Secara teoritis seharusnya baik-baik saja, tetapi pastikan bahwa itu tidak membiarkan Anda masuk sebagai akun.
Sebagai catatan: Saya sama sekali tidak mengatakan ini adalah ide yang baik, tetapi itu akan mencapai fungsi yang Anda inginkan.
EDIT: Demi kelengkapan, ini disarankan oleh VarunAgw: Anda dapat menambahkan pengguna seperti biasa dengan useradd -s /sbin/nologin -N tmp
kemudian memodifikasi /etc/passwd
dan /etc/shadow
mengubah pengguna tmp
ke ~
dan mengubah lokasihome directory
useradd 'tmp'
dan kemudian menggantinya tmp
dengan~
shadow
entri tetapi saya kira selama tidak ada kata sandi yang ditetapkan, itu bukan risiko tambahan.
Anda dapat menggunakan CDPATH dan meletakkan direktori yang secara harfiah disebutkan ~~
di salah satu komponen CDPATH Anda.
Dari man bash
(tetapi CDPATH tersedia bahkan di sh
)
Jalur pencarian untuk perintah cd. Ini adalah daftar direktori yang dipisahkan oleh titik dua di mana shell mencari direktori tujuan yang ditentukan oleh perintah cd. Nilai sampel adalah ".: ~: / Usr".
Itu akan memungkinkan Anda melakukannya cd ~~
.
Jika Anda ingin melakukan hal-hal seperti vi ~~/someFile
dari mana saja di pohon direktori, maka Anda kurang beruntung jika Anda bersikeras ~~
benar kecuali Anda meretas shell Anda, namun, Anda dapat menggunakan variabel atau variabel lingkungan untuk menyimpan direktori sihir Anda sehingga Anda dapat melakukan misalnya$tilda/someFile
Saya biasanya meletakkan file yang sering diakses di dalam direktori yang tidak lama bernama di direktori home saya sehingga saya dapat mengaksesnya dengan path seperti ~/b
atau ~/l
.
Secara alami, Anda biasanya dapat mengganti direktori dengan symlink ke direktori sebanyak yang Anda inginkan.
~
Ekspansi tilde shell sebagian besar dapat diprogram. Itu diperluas baik ke direktori pengguna dari nama pengguna sistem yang dinyatakan dalam konteks trailing (dan solusi yang sangat baik di sepanjang baris ini telah ditawarkan) , nilai $HOME
variabel shell, atau tidak sama sekali.
Begitu:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Saya mengubah $HOME
semua waktu, dan saya menyimpan fungsi di file lingkungan shell saya untuk mengatur ulang:
home(){
HOME=~$USER
cd ~; pwd
}
Jika Anda ingin menggunakan ~
tilde dengan cara yang tidak merujuk ke direktori home Anda, maka lakukanlah . Tugaskan kembali $HOME
. Jangan takut itu. $HOME
hanyalah variabel shell seperti yang lainnya.
Saran lain yang saya miliki hanyalah sedikit perluasan pada saran bagus dari PSkocik tentang penggunaan $CDPATH
. Namun, satu hal yang tidak ia sebutkan adalah Anda dapat menggunakan dan mengubah $CDPATH
sebaris tanpa mengubah nilai shell saat ini $CDPATH
sama sekali. Sebagai contoh:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
adalah tentu builtin shell, tapi itu bukan POSIX khusus shell builtin, dan menyatakan nilai untuk $CDPATH
tidak mempengaruhi nilai shell saat ini. Jika Anda menggunakannya seperti yang saya lakukan $CDPATH
, nilai di atas hanya diubah untuk lingkungan dari satu cd
perintah, dan dikembalikan ke nilai sebelumnya sesudahnya. Saya cenderung menemukan teknik di atas paling berguna ketika digunakan dalam kombinasi dengan penyelesaian sejarah. Saya akan melakukan hal di atas, ubah ke direktori, jalankan beberapa perintah, lalu tekan hingga saya kembali ke cd
perintah saya dan mundur satu atau dua segmen path untuk pindah ke tempat lain.
Sekarang jika Anda menggabungkan kedua konsep ini maka Anda dapat membuat perintah yang sebelumnya digunakan berarti sesuatu yang sama sekali berbeda saat Anda menggunakannya.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Berfungsi dengan sangat baik sebagai fungsi bash:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
Inilah pendekatan lain yang sedikit lebih dekat (saya tahu saya tidak terlalu dekat dengan persyaratan)
function ~~ { echo /test; }
Kemudian dengan beberapa karakter lagi:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
tidak akan bekerja dengan baik, atau vim ~~/foo.txt
, dll ...
CDPATH
variabel untuk menangani cd
kasus ini.
~
. Dan ~
tidak digunakan seperti perintah.
CDPATH
adalah tidak bekerja untuk perintah di luar .... CD. Yaitu Anda bisa cd ~~
atau cd ~~/testdir1
tetapi Anda tidak bisavim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '