别名是个人工具

别名是个人工具

我创建了这个文件:/etc/profile.d/pycharm_alias.sh

startPyCharm() {...

}

alias py=startPyCharm

我重新启动了电脑,但别名不可用:

===> alias
...empty

如果我通过 ssh 登录到 PC,则别名可用:

===> ssh root@localhost
..
root@pc:~# alias
alias py='startPyCharm'

如何使别名对 ubuntu linux 系统的所有用户可用?

我们使用 bash shell。

答案1

您可以尝试将其放入/etc/bash.bashrc。它声明的目的是# System-wide .bashrc file for interactive bash(1) shells.这似乎就是您想要的。我很惊讶您的 profile.d 解决方案不起作用。

答案2

别名是个人工具

  • 我认为别名是供个人使用的(并且应该驻留在每个用户的~/.bashrc文件中)。

Shellscript(和其他程序)是通用工具

  • 创建一个 shell 脚本并将其放在“每个人的路径”中的一个目录中。

    • 但必须小心谨慎,以免覆盖现有程序或将现有程序置于影子中。您可以将 shellscript 放在路径中现有程序的前面,这样系统就不会通过 找到它PATH

      换句话说,确保名称是唯一的以避免与其他程序发生问题。

详细提示

这是我在 Lubuntu 18.04.x LTS 中的路径。

$ echo $PATH
/home/sudodus/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/games

我有一个自己的bin目录,它会自动找到并放在路径的开头(优先级最高)。但路径的其余部分是标准的。

我建议你

  • 检查名称是否不存在冲突

    type unique-name  # shows if it exists and what kind of program it is
    which unique-name # shows where an installed program is stored 
    unique-name       # if known but not installed, you get a hint about it
    apt-cache policy *unique-name*  # package name (may or may not be same as program name)
    
  • 如果没有冲突,则创建一个 shellscript(这是一个简单的例子)

    echo 'echo "Hello World"' > unique-name
    
  • 使 shellscript 可执行

    chmod +x unique-name
    
  • 如果需要 root 权限,则将 shellscript 放入/usr/local/sbin,否则放入/usr/local/bin

    sudo cp -i unique-name /usr/local/bin
    

    -i如果该名称在目标目录中已经存在,该选项将提示您。

如何让所有用户都能运行你的 shellscript

当你使 shellscript 可执行并且它位于每个人的目录中时PATH,每个人都可以通过其文件名运行它,

unique-name

有几个短字符串尚未用作标准程序的名称,您可以通过以下方式找到这些名称:

type short-string-to-be-tested

例如

$ type py
bash: type: py: not found

在我的计算机中没有可执行程序,也没有内置有该名称的 shell,所以我可以将其用作py文件名(并且我不需要别名)。

py但是如果你在将你的 shellscript 重命名为该名称之前尝试运行,

$ py

Command 'py' not found, but can be installed with:

sudo apt install pythonpy

你会发现有这样一个程序(但尚未安装),选择另一个名称可能是个好主意,例如

pych

它可以是从您的原始名称 PyCharm 派生出来的简称。

答案3

为什么全球alias计划行不通

全局alias不起作用的一个原因如下这里

不应使用此答案中的方法。(或).sh中的文件中的别名将仅针对登录 shell 进行定义,并且它们在交互式非登录 shell 中不起作用。 与环境变量不同,bash 无法将别名导出到子进程,甚至子 bash shell 也不行。 如果仅在登录 shell 中测试此方法,例如通过在虚拟控制台或通过 SSH 登录获得的原始 shell,则该方法似乎可以正常工作,但/etc/profile.d//etc/profile在他们的孩子壳里失败了并且在通过 GUI 终端窗口启动的 shell 中也会失败。–伊莱亚·卡根2015 年 4 月 18 日 0:56


使用全局函数/etc/profile.d

目前您有/etc/profile.d/pycharm_alias.sh包含:

startPyCharm() {...

}

alias py=startPyCharm

没有必要为函数分配全局别名。您可以简单地创建一个名为的全局函数,py它执行该操作StartPyCharm

例如,创建/etc/profile.d/py.sh包含:

#!/bin/bash

py () {
    echo "Running py function in /etc/profile.d/py.sh"
    echo "Substitute for py alias which calls StartPyCharm function"
}

export -f py

echo用当前函数的内容替换命令StartPyCharm ()

当用户登录并打开 shell 时,他们可以输入py并调用全局函数,而不是函数的全局别名。

要查看所有函数(全局和本地),请使用declare -F

答案4

您只需/etc/bash.bashrc输入以下内容即可导航至:

sudo nano /etc/bash.bashrc

然后在第一个#Comment 后插入以下代码:

alias py='startPyCharm'

然后按Ctrl+ X,然后y,最后按Enter

然后,在控制台中,只输入bash即可。如果您只想将命令设置为某个帐户,请使用相同的步骤,但路径必须为/home/<user>/.bashrc

相关内容