无论我尝试运行什么,我都会收到错误消息:
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
Run Code Online (Sandbox Code Playgroud)
我在我的 .bashrc 文件中做了一些修改,但后来删除了另外两行。然而不知何故 PATH 变量似乎已被破坏。
我没有将 ~/bin 添加到我的任何 .bash* 文件中。但是, $PATH 确实列出了该目录。
我在 Ubuntu 特定的 StackExchange 中问这个问题的原因是,我在 Fedora 和 Ubuntu 机器上都有完全相同的 .bashrc、.bash_profile 和 .bash_aliases(事实上,我在 Dropbox 上有它们并在 ~ 中进行了符号链接)和在我的 Fedora 机器中,没有添加 ~/bin。
换句话说,如果我通过在 .bashrc 中创建一个条目将 ~/bin 添加到我的路径中,它会在 Fedora 上出现一次,在 Ubuntu 上出现两次。
~/bin 在哪里添加到我的路径中?
我不小心覆盖了/etc/bash.bashrc文件。
请给我要恢复的文件中的默认内容,或文件本身。
我不记得在哪里,但我已经看到 bash 提示的当前路径以一种有趣的方式缩短了:路径中包含的每个目录(最后一个除外)仅被其第一个字母替换。例如:path/to/some/directory将缩短为p/t/s/directory.
我怎样才能重现这种行为?
在 Ubuntu 默认 .bashrc 中有这个:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?如果 shell 以非交互方式运行,那么 bashrc 中是否有某些东西无法运行?
我已按照此处和此处提供的操作方法链接中的说明进行操作。但是似乎没有任何地方说明我如何更改不同部分的颜色,因为目前我将其设置为:
PS1='${debian_chroot:+($debian_chroot)}[\t] \u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud)
但是文字还是全白的,我怎么可能把时间的数字变成绿色,而我的用户名和计算机名变成蓝色?我正在运行 Ubuntu GNOME 15.04。
语境
您正在使用 Ubuntu LTS 14.04。您以 root 用户身份登录。您运行以下命令:
exec su simple_user -c "/bin/bash /etc/init.d/simple_user_service"
Run Code Online (Sandbox Code Playgroud)
以便“simple_user_service”以“simple_user”权限而不是root权限启动。
题
似乎“exec su simple_user -c”不为新的交互式shell终端提供.bashrc、.profile或任何其他通常来源的文件。我通过在 simple_user .bashrc 文件中添加这一行来确认:
export TEST="Hello"
Run Code Online (Sandbox Code Playgroud)
然后在我的“simple_user_service”初始化脚本中:
#!/bin/bash
### BEGIN INIT INFO
# Provides: test_script
# X-Interactive: true
# Short-Description: Test script
### END INIT INFO
echo $TEST
Run Code Online (Sandbox Code Playgroud)
当我执行脚本时,没有打印任何内容,但是如果我执行以下命令:
su simple_user
echo $TEST
> Hello
Run Code Online (Sandbox Code Playgroud)
TEST 变量已正确设置和打印。
所以我想知道:“exec su simple_user -c”命令是否提供任何 simple_user 配置文件/bashrc 文件?如果是这样,有没有办法知道哪些?
非常感谢你的帮助!
[编辑 - 2 小时后]
感谢我收到的答案,我更准确地理解了“man bash”指令。我找到了这个:
When bash is started non-interactively, to run a shell script, for …Run Code Online (Sandbox Code Playgroud) 我一直在使用 bash,我遇到了--rcfile和--init-file选项。Bash 的手册页在同一部分列出了这些,但它们的行为似乎不同。考虑以下场景:
我创建了一个~/.bash_profile具有以下命令的:
exec env -i <variables> /bin/bash <option> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
用于需要终端以特定配置打开的项目;它被指示不要读取/etc/bash.bashrc,而是只读取~/.bashrc. 如果<option>是--init-file,~/.bashrc则读取没有错误。然而,--rcfile在它的位置似乎没有来源文件。
这两个看似相同的命令有什么区别?
我已经使用这个片段在终端启动时启动 tmux:
# TMUX startup
if command -v tmux>/dev/null; then
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux
fi
Run Code Online (Sandbox Code Playgroud)
但是有了这个,我不能在没有关闭终端屏幕的情况下退出 tmux。
我试过了:
Ctrl + b :detach
exit
并寻找PID并杀死它。所有这些方法也关闭了终端。
我应该如何配置 tmux 在启动终端时启动,但仍然能够在不关闭终端的情况下关闭它?任何提示表示赞赏!
当按Ctrl+ Alt+T打开终端时,我会看到一个带有简单输入提示的空白屏幕。
是否可以(通过修改~/.bashrc)显示当前日历,突出显示今天和当前时间?
如果时间可以以大量显示(使用 figlet?),那将是一个奖励。