我创建了这个文件:/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
。