我想~~
指向另一个目录,以便可以将其用作快捷方式。我希望它具有与完全相同的功能~
。我怎样才能做到这一点?
我想~~
指向另一个目录,以便可以将其用作快捷方式。我希望它具有与完全相同的功能~
。我怎样才能做到这一点?
Answers:
其实有办法,不是好办法,但是有办法,哈哈!
将以下内容添加到您的/etc/passwd
文件中:
~:x:1111:99:special Character user:/test:/sbin/nologin
将1111
UID 替换为有意义的内容,并替换/test
为您想要~~模仿的目录。
99
我的系统上的nobody
组是我建议您执行的操作,以确保该组是对将要使用的任何文件都没有权限的组。从理论上讲,/sbin/nologin
作为外壳,它不应该被使用,它也将没有/etc/shadow
条目,因此没有密码。从理论上讲应该没问题,但请确保不要以某种方式让您以该帐户身份登录。
附带说明:我绝不是说这是一个好主意,但是它将完成您想要的功能。
编辑:为完整性起见,这是VarunAgw建议的:您可以正常添加用户useradd -s /sbin/nologin -N tmp
,然后进行修改/etc/passwd
,/etc/shadow
并将用户更改为tmp
,~
并更改其位置home directory
useradd 'tmp'
再替换tmp
为~
shadow
条目使它合法化,但是我想只要没有设置密码就不会带来额外的风险。
您可以使用CDPATH,并~~
在一个CDPATH组件之一中放置一个原义命名的目录。
从man bash
(但CDPATH在中也可用sh
)
cd命令的搜索路径。这是一个用冒号分隔的目录列表,外壳程序在其中查找cd命令指定的目标目录。示例值为“。:〜:/ usr”。
那会让你做cd ~~
。
如果您想vi ~~/someFile
在目录树中的任何位置进行操作,那么如果您坚持要~~
字面上的意思,除非您对外壳程序进行了黑客攻击,否则您很不走运,但是,您可以使用变量或环境变量来存储魔术目录,以便您可以执行,例如$tilda/someFile
我通常将经常访问的文件放在主目录的~/b
简称目录中,以便可以使用诸如或的路径访问它们~/l
。
自然地,通常可以根据需要用目录的符号链接替换目录。
外壳的~
波浪号扩展大部分是可编程的。它可以扩展到在其尾随上下文中声明的系统用户名的用户目录(并且已经提供了沿这些方面的出色解决方案),$HOME
shell变量的值,或者根本不扩展。
所以:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
我$HOME
一直都在更改,并且在shell的环境文件中保留了一个函数以进行重置:
home(){
HOME=~$USER
cd ~; pwd
}
如果您想以~
某种方式使用代字号而不引用您的主目录,请使用。重新分配$HOME
。不要害怕。$HOME
与其他变量一样,只是一个shell变量。
我的另一个建议是对@PSkocik有关使用的出色建议仅做些微扩展$CDPATH
。他没有提到的一件事是,您可以使用和更改$CDPATH
内联而不需要完全更改当前的shell值$CDPATH
。例如:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
必须是内置的Shell,但不是POSIX 特殊的 Shell内置,因此声明for的值$CDPATH
不会影响其当前Shell的值。如果您像我一样使用它,$CDPATH
则只会针对一个cd
命令的环境更改的值,之后将其恢复为先前的值。与历史记录完成功能结合使用时,我倾向于发现上述技术最有用。我将执行上述操作,转到目录,运行一些命令,然后按向上直到我回到cd
命令并在一个或两个路径段后退空格以移至其他位置。
现在,如果您将这两个概念结合在一起,则可以使先前使用的命令在下次使用时的含义完全不同。
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
作为bash函数,效果很好:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
这是另一种更接近的方法(我知道我没有达到要求的程度)
function ~~ { echo /test; }
然后再添加几个字符:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
会不会做得这么好,或者vim ~~/foo.txt
等等……
CDPATH
变量来处理这种cd
情况。
~
。并且~
不像命令那样使用。
CDPATH
在于它不适用于CD以外的命令。IE浏览器您可以cd ~~
或可以cd ~~/testdir1
但不能vim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '