我想创建一个projects
可以从任何地方访问的目录,例如主目录(~
)。例如,以下内容应该有效(无论 cwd 是什么)
cd projects
ls projects/project1
关于我如何做到这一点有什么想法吗?
答案1
如果您使用dash
,bash
或ksh
(也许还有其他一些 shell - 我不记得所有这些 shell 都实现了此功能),您可以设置该CDPATH
变量。从man bash
:
CDPATH
命令的搜索路径cd
。这是一个以冒号分隔的目录列表,shell 在其中查找 cd 命令指定的目标目录。样本值为.:~:/usr
.
顺便说一句,样本值搜索当前目录,〜(您的主目录),然后/usr
以确切的顺序搜索 - ie.
在该:
分隔列表中排在第一位,因此优先于~
和/usr
。
答案2
您可以创建一个包装函数来cd
执行特殊的酱汁操作。
cd(){
case "$1" in
(projects|projects/*)
local dir="$1"
command cd "/some/dir/${dir}" ;;
(*)
command cd "$@" ;;
esac
}
通过一些概括,可以扩展以处理多个特殊路径,并且通过一些额外的细化,特殊路径甚至不需要构成目的地的一部分。
以机智:
cd(){
local dir=''
local input="${1}/" # force on / to make matches and substitutions easier
case "${input}" in
(projects/*) dir="/some/dir/$input" ;;
# prj is a nick name for "projects"
(prj/*) dir="/some/dir/projects/${input#*/}" ;;
(foobar/*) dir="/another/place/$input" ;;
# : is a nickname for foobar
(:/*) dir="/another/place/foobar/${input#*/}" ;;
(*)
command cd "$@"
return
;;
esac
command cd "${dir}"
}
这允许您为目标目录指定一个昵称,从OP提到的行为中汲取灵感~
。
答案3
波形符运算符比主目录稍微复杂一些。看:https://datacadamia.com/lang/bash/tilde_expansion
现在,要创建一个适用于所有用户的变量或函数(例如 PATH),请使用 /etc/profile.d 中的 bash 脚本将其添加到系统中
例如,您可以有一个文件 /etc/profile.d/00-custom-vars.sh
export PROJECT="/var/www/somesite"
例如,您可以使用 cd $PROJECT/html 从 shell 引用它。
但是,如果您一心想让它看起来像一个常规文件夹,您可以通过巧妙地使用 bash 中的别名和函数为 cd 命令编写填充程序来完成它。
答案4
~
主目录的扩展与用户管理相关。但波形符扩展可以做更多的事情。如果您有一个名为项目,波浪号~projects
将扩展到该用户的主目录,可能是/home/projects/
。
结论:不要说我推荐这个,但是如果你不介意滥用你的系统,你可以添加一个名为项目(如果您的发行版没有 GUI,类似useradd
和的命令会有所帮助),并为您自己提供对项目主目录的完全访问权限,甚至可以让您自己成为它的所有者: 。您甚至可以使用(-l 表示锁定)禁用此虚构用户项目的登录。如果用户项目无法登录,则他或她将不需要创建其主目录时放置的所有内容,因此将其全部删除。当然,所有这些都需要以 root 身份完成。adduser
chown you:yourgroup ~projects/
passwd -l projects