Bisakah saya membuat "alias direktori" khusus seperti '~' di bash?

13

Dalam bash saya bisa pergi ke direktori home saya dengan cd ~dan sebenarnya merujuk ke direktori home saya dengan perintah apa saja ~.

Bisakah saya membuat "alias direktori" baru (kustom) untuk merujuk ke direktori lain? Contoh hipotesis:

make_alias "~~" /mnt/photon/work/foo_project/

cp ~/home.png ~~/set_8/home_4.png

Bagaimana itu bisa dilakukan, jika ya? Jika tidak bisa, apakah dengan desain dan mengapa demikian?

Senang memiliki: Di ​​mana dan bagaimana ~diatur dan diikat ke "~" ini?

n611x007
sumber
1
Tidak sangat membantu Anda, tetapi Anda dapat melakukannya dengan alias global di ... ZSH, tetapi tidak BASH. : alias -g ~~ = '/ mnt / foton / work / foo_project /'
SuperMagic
1
@SuperMagic: Saya suka alias global juga. Tetapi pada contoh kedua (cp ~~ / set ...) mereka akan gagal. Direktori yang dinamai lebih sesuai: n=/mnt/photon/work/foo_projectdan kemudian cp foo ~n/bar. (Catatan untuk OP: Juga terbatas pada zsh).
mpy
1
@ OliverSalzburg: Saya rasa ini bukan duplikat. Pertanyaan lain bertanya tentang pembuatan ulang karakter tunggal ( @atau _), yang tidak mungkin dilakukan di bash, sementara yang ~~pasti (hacky, tapi mungkin). Juga, itu tidak menjawab bagaimana remapping ini dilakukan.
Dennis
Pertanyaan terkait adalah: superuser.com/questions/541767
n611x007

Jawaban:

25

Tilde bukan alias, itu bagian dari ekspansi shell bash (sama seperti *.txtatau $((1 + 2))).

Ekspansi Bash tilde mendukung awalan tilde berikut:

~            The value of $HOME

~/foo        $HOME/foo

~fred/foo    The subdirectory foo of the home directory of the user fred

~+/foo       $PWD/foo

~-/foo       ${OLDPWD-'~-'}/foo

~N           The string that would be displayed by `dirs +N'

~+N          The string that would be displayed by `dirs +N'

~-N          The string that would be displayed by `dirs -N'

dirsmenggunakan tumpukan direktori. Anda dapat menggunakan pushduntuk menambahkan direktori ke dalamnya.

Untuk menjawab pertanyaan spesifik Anda ~~, ya, mungkin untuk memetakan direktori ke sana. Cukup buat pengguna yang dipanggil ~dan tetapkan /mnt/photon/work/foo_project/sebagai direktori home-nya:

sudo useradd '~'
sudo sed -i 's#:/home/~:[^:]*$#:/mnt/photon/work/foo_project:/bin/false#' /etc/passwd

Tentu saja, pendekatan yang lebih "waras" hanyalah mendefinisikan variabel shell yang menunjuk ke direktori Anda di ~/.bashrcdalam perintah Anda

foo=/mnt/photon/work/foo_project

yang dapat diakses melalui $foo, seperti biasa.

Dennis
sumber