我在项目文件夹中创建了一个 anaconda 环境,指定了 -p 选项的路径,即不在默认的 anaconda3/envs 文件夹中:
conda create -p venv
Run Code Online (Sandbox Code Playgroud)
问题是当我激活该环境时,终端中的 bash 前缀太长,即将环境的整个路径添加到提示中:
(/path/to/the/environment/venv) user@machine: ~/path/to/environment/$
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,意味着缩短它或从提示中删除前缀?
我的 $PS1:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
Run Code Online (Sandbox Code Playgroud) $password = ConvertTo-SecureString \xe2\x80\x9cPassword+++\xe2\x80\x9d -AsPlainText -Force\n$Cred = New-Object System.Management.Automation.PSCredential ("Admin", $password)\n$FileLocale = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition\nWrite-Output $FileLocale\n$AntFile = "$FileLocale\\StartApps.ps1"\nWrite-Output $AntFile\nStart-Process PowerShell.exe -ArgumentList "-command &$AntFile -UserCredential $Cred" \nRun Code Online (Sandbox Code Playgroud)\n嗨,该代码在 .ps1 中运行,我调用另一个脚本,他完成了他的工作。但是当我在 ps2exe 的帮助下将其转换为 .exe 时,他不再做他的工作了。作为管理员与否。这不是我第一次使用该启动进程,但这是我第一次使用变量作为命令的目标。有谁知道 ps1 和 exe 之间出了什么问题吗?
\n谢谢
\n我目前在bash中有一个提示,它调用一个函数来输出最后一个命令运行的返回码(如果非零):
exit_code_prompt()
{
local exit_code=$?
if [ $exit_code -ne 0 ]
then
tput setaf 1
printf "%s" $exit_code
tput sgr0
fi
}
PS1='$(exit_code_prompt)\$ '
Run Code Online (Sandbox Code Playgroud)
除非$?不重置,除非运行另一个命令,否则这样可以很好地工作:
$ echo "works"
works
$ command_not_found
bash: command_not_found: command not found
127$
127$
127$
127$ echo "works"
works
$
Run Code Online (Sandbox Code Playgroud)
是否可以$?在第一次exit_code_prompt()运行时重置/取消设置父shell 的值,使其不再继续重复提示中的值?
非常感谢,史蒂夫.
我的.bashrc:
# show a short way
shortwd() {
num_dirs=3
pwd_symbol="..."
newPWD="${PWD/#$HOME/~}"
if [ $(echo -n $newPWD | awk -F '/' '{print NF}') -gt $num_dirs ]; then
newPWD=$(echo -n $newPWD | awk -F '/' '{print $1 "/.../" $(NF-1) "/" $(NF)}')
fi
echo -n $newPWD
}
# show git branch
git_branch() {
git symbolic-ref HEAD --short
}
export PS1='\n$CONDA_PROMPT_MODIFIER\e[38;5;211m$(shortwd)\e[38;5;48m [$(git_branch)]\e[0m$'
Run Code Online (Sandbox Code Playgroud)
现在 bash 看起来像:
(基础)/.../MyCode/python [master]$
但在我跑去conda activate env切换我的 conda 环境之后。它有一个 BUG,无论我运行什么命令,总是在命令输出的末尾显示当前的 conda env 名称。如下所示:
(基础) /.../MyCode/python [master]$ls
code_study keras mxnet …
我使用zsh但没有配备 oh-my-zsh,因为我在我的机器上克隆了许多 git 存储库,并且 oh-my-zsh 的默认主题或“josh”主题使其非常慢,对于cd和ls命令等。
因此,我删除了 oh-my-zsh 并仅使用 zsh 的默认推荐配置,除了添加一些别名和路径变量。
现在问题来了:我通过conda管理我的 python 环境,并且提示符中没有显示当前环境名称。
我已经执行了命令:
conda init zsh
Run Code Online (Sandbox Code Playgroud)
并重新打开我的终端(默认 shell 是 zsh),仍然不显示“(base)”或“(py36)”东西。
我怎样才能告诉我的终端显示这些东西?git 分支对我的工作并不重要,但当前的 python 版本确实很重要,因为与 DeepLearning 相关的工具使用许多不同的 python 版本。
我在〜/ .localsh文件中添加了以下内容,以便在使用git时自定义我的bash提示符.
基本上我想让我的终端显示当前分支.gitk工具显示带有绿色背景和黑色前景的分支,这就是我正在尝试做的事情.
我的工作原理,但是当我按下键盘上的向上箭头以回滚以前的命令时,它会被覆盖.
这个东西碰巧发生在你没有用[\ e [0m]结束颜色序列的时候.现在,由于调用了getgitbranch函数,它正在发生在我身上.我认为它与终端有关,不知道提示有多长.
接下来的问题是......如何在我的bash提示中正确使用动态元素,而不是在使用向上箭头时使用动态元素?
function getgitbranch()
{
git branch | grep "^\*" | cut -c3-
}
function blabla()
{
PS1=""
PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] "
PS1="$PS1\[\e[1;35m\][\[\e[0m\]"
PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]"
PS1="$PS1\[\e[1;35m\]]\[\e[0m\]"
PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] "
export PS1
}
Run Code Online (Sandbox Code Playgroud) 我正在进行动态bash提示,我希望在PS1中报告在本地文件系统上启用了哪个版本的配置文件.这是我试图做的简化的一个人为的例子.出错的事情:出现错误的包装和/或逃生括号.谁能发现我做错了什么?
如果设计的配置匹配"v2",我想在PS1中看到该版本为黄色.如果是"v1",则提示为绿色.设置:
$ grep FOOVER foo-*.conf
foo-v1.conf:# FOOVER xyz-v1
foo-v2.conf:# FOOVER zet-v2
Run Code Online (Sandbox Code Playgroud)
我然后symlink foo.conf foo-v1.conf.我的bashrc:
0 GREEN=$(tput setaf 034)
1 YELLOW=$(tput setaf 3)
2 BLUE=$(tput setaf 4)
3 CYAN=$(tput setaf 6)
4 BOLD=$(tput bold)
5 RESET=$(tput sgr0)
6 CONF=$HOME/foo.conf
7
8 function __get_foo_version () {
9 FOOVER=$(grep FOOVER $CONF | awk '{print $3}')
10 if [[ "$FOOVER" =~ v2$ ]]; then
11 style_foover="${BOLD}${YELLOW}$FOOVER"
12 #style_foover="\[${BOLD}${YELLOW}\]$FOOVER"
13 elif [[ "$FOOVER" =~ v1$ ]]; then
14 style_foover="${BOLD}${GREEN}$FOOVER"
15 #style_foover="\[${BOLD}${GREEN}\]$FOOVER"
16 fi
17 …Run Code Online (Sandbox Code Playgroud) 登录到root时,echoed的默认提示为\s-\v\$,显示为bash-4.2#.我正在尝试使用bash提示符,以便显示工作目录.
export PS1="\w \$".
提示正确显示,但是,符号\$不会转换为a #,即使我$UID是0,哪种类型会忽略省略用户符号的目的\u.有什么额外的东西我必须添加,或者如果我导出它该符号不起作用?
我想用键盘上的热键(例如CTRL + SHIFT + F)执行Powershell脚本(ps1-文件)。
我设法创建了脚本的快捷方式(右键单击资源管理器>新建>快捷方式)。快捷方式的目标是:“%SystemRoot%\ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -ExecutionPolicy绕过-文件” PATH_TO_THE_SCRIPT“”。
当我手动执行脚本(通过双击快捷方式)时,它就像一个超级按钮。但是,当我尝试在“快捷方式属性”(CTRL + SHIFT + F)中分配“快捷键”并按我刚刚定义的快捷键时,什么也没有发生。怎么了?
我非常确定这与安全策略有关。但是我不知道到底是什么。
这是我的执行政策:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process RemoteSigned
CurrentUser Unrestricted
LocalMachine Unrestricted
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
似乎通过执行PS0和PS1变量中的代码(据我所知,在运行提示命令之前和之后评估),应该可以记录每个正在运行的命令的时间并将其显示在提示中。像这样:
user@machine ~/tmp
$ sleep 1
user@machine ~/tmp 1.01s
$
Run Code Online (Sandbox Code Playgroud)
但是,由于这样的事情不起作用,我很快就陷入了PS0中的录制时间:
PS0='$(START=$(date +%s.%N))'
Run Code Online (Sandbox Code Playgroud)
据我了解,START分配发生在子外壳中,因此在外壳中不可见。您将如何处理?
ps1 ×10
bash ×7
anaconda ×2
git ×2
powershell ×2
conda ×1
exe ×1
linux ×1
prompt ×1
ps2exe-gui ×1
python ×1
python-venv ×1
root ×1
shell ×1
zsh ×1