创建自定义的全局可访问目录,例如主目录

创建自定义的全局可访问目录,例如主目录

我想创建一个projects可以从任何地方访问的目录,例如主目录(~)。例如,以下内容应该有效(无论 cwd 是什么)

  • cd projects
  • ls projects/project1

关于我如何做到这一点有什么想法吗?

答案1

如果您使用dash,bashksh(也许还有其他一些 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 身份完成。adduserchown you:yourgroup ~projects/passwd -l projects

相关内容