Closed Phate6660 closed 5 years ago
That's pretty weird. Can you post the full error? I'll try to reproduce it then.
That is the full error, as long as I use the example settings you provided in the readme. When I use the default settings, I get this error:
bash: v: command not found
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
What's your bash version?
So you don't get the error with the example settings (in the readme) but do get the error with the default settings?
My current bash version is 4.4.23(1)-release
.
I get errors with both, I just get less errors with the example settings.
bash: v: command not found
is in both, however the defaults give me these extra errors.
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
I've tried this with the following Dockerfile:
FROM bash:4.4.23
RUN apk update && apk add wget
RUN wget https://raw.githubusercontent.com/petobens/trueline/master/trueline.sh -P /
and I'm still unable to reproduce:
Mmm can you try i) updating bash and see if the problem persists? and ii) share your .bashrc
and .bash_profile
files?
I'll have to download updated source code for it then. I'm currently running Gentoo and this is the latest version they have for it in the repos.
Here is my .bashrc:
# /etc/skel/.bashrc
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!
return
fi
### Options for trueline
declare -A TRUELINE_COLORS=(
[black]='36;39;46'
[default]='36;39;46'
[white]='208;208;208'
[green]='152;195;121'
)
declare -a TRUELINE_SEGMENTS=(
'user,black,white'
'working_dir,white,black'
'exit_status,black,white'
)
declare -A TRUELINE_SYMBOLS=(
[segment_separator]=''
[working_dir_folder]='...'
[working_dir_separator]='/'
[working_dir_home]='~'
)
TRUELINE_SHOW_VIMODE=false
_trueline_time_segment() {
local prompt_time="\t"
if [[ -n $prompt_time ]]; then
local fg_color="$1"
local bg_color="$2"
local segment="$(_trueline_separator)"
segment+="$(_trueline_content "$fg_color" "$bg_color" 1 " $prompt_time ")"
PS1+="$segment"
_last_color=$bg_color
fi
}
### Autostart
# Enable mcfly, a history viewer/editor/executor written in Rust.
source ~/bin/mcfly.bash
# Enable completion.
source /etc/bash/bashrc.d/bash_completion.sh
# Alias thefuck to fuck.
eval $(thefuck --alias)
# Source trueline.
source ~/bin/trueline
### Environmental Variables
# General
# export PS1="[\W]-> "
export PATH="$HOME/.cargo/bin:$HOME/scripts:$HOME/bin:$HOME/.config/guix/current/bin:$PATH"
export EDITOR="nano"
export HISTCONTROL="$HISTCONTROL erasedups:ignoreboth"
# fff
export FFF_FAV1=/run/media/valley
export FFF_FAV2=/home/ff
export FFF_FAV3=~/downloads
export FFF_FAV4=~/downloads/github
export FFF_FAV5=~/projects
export FFF_FAV6=
export FFF_FAV7=
export FFF_FAV8=
export FFF_FAV9=
### Functions
wttr() {
# change [REDACTED] to your default location
local request="wttr.in/${1-[REDACTED]?u}"
[ "$COLUMNS" -lt 125 ] && request+='?n'
curl -H "Accept-Language: ${LANG%_*}" --compressed "$request"
}
hmm () {
artists="$(echo "$(mpc list Artist | sed '/^\s*$/d' | wc -l) artists.")"
albums="$(echo "$(mpc list Album | sed '/^\s*$/d' | wc -l) albums.")"
songs="$(echo "$(mpc list Title | sed '/^\s*$/d' | wc -l) songs.")"
size="$(echo Which uses up "$(du -hs ~/Music | cut -c 1-4)"B of storage.)"
amount="$(echo "Also, you have played $(w3m -dump https://libre.fm/user/phate6660/stats | grep Total | sed "s/[^0-9]//g") complete songs.")"
echo -e "\nYou have:\n---------\n$artists\n$albums\n$songs\n\n$size\n$amount\n"
}
f() {
fff "$@"
cd "$(cat "${XDG_CACHE_HOME:=${HOME}/.cache}/fff/.fff_d")"
}
title() { echo -e '\033]2;'$1'\007'; }
### Aliases
# General
alias ls="exa -lFha"
alias cat="bat"
alias fetch="rsfetch --no-wm-de -huMp portage"
alias mkdir='mkdir -pv'
alias myip="curl --silent https://ipecho.net/plain; echo"
alias ss="ss -ntlp"
alias du="diskus"
# Process-related.
alias ps="ps auxf"
alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"
alias htop="htop -t"
alias vtop="htop -u valley"
# Mount music directories.
alias umus="sudo mount --bind '/run/media/valley/Music and Pics/Music' ~/Music/Music"
alias umus2="sudo mount --bind '/run/media/valley/music-2/Music' ~/Music/Music-2"
alias umus3="sudo mount --bind '/run/media/valley/Anime and Music/Music' ~/Music/Music-3"
alias umus4="sudo mount --bind '/run/media/valley/BD-Rips/Music' ~/Music/Music-4"
# Player, lyrics, and scrobbler log.
alias mus-rwb='ncmpcpp -c ~/.ncmpcpp/config-rwb'
alias lyrics='ncmpcpp -c ~/.ncmpcpp/config-lyrics'
alias scriblog='clear; tail -f ~/.mpdscribble/mpdscribble.log'
# YouTube
alias ytdl='youtube-dl'
alias yt="youtube-viewer"
# ProtonVPN
alias pvre="sudo pvpn -d; sudo pvpn -f; sudo pvpn --status; read -p 'Press [ENTER] to continue.'; speedtest --secure --no-upload"
alias pvstat="sudo pvpn --status"
alias speed="speedtest --secure --no-upload"
# Gentoo
alias merge="sudo emerge -atv"
alias searchfor="emerge --search"
alias rem="sudo emerge -av --depclean"
alias frem="sudo emerge -av --unmerge"
alias clean="sudo emerge -Da --depclean; sudo revdep-rebuild -i"
Here is my .bash_profile:
# /etc/skel/.bash_profile
# This file is sourced by bash for login shells. The following line
# runs your .bashrc and is recommended by the bash info pages.
if [[ -f ~/.bashrc ]] ; then
. ~/.bashrc
fi
The errors only appear when sourcing trueline.
Can you try the following:
# Enable mcfly, a history viewer/editor/executor written in Rust.
# source ~/bin/mcfly.bash
and see if the problem persists
2. Put a `echo "foo"` somewhere in the trueline file and then source it again until you can identify which is the problematic line (that would greatly help me to reproduce your error)
Just commented those out, errors still present.
I'll work on identifying the line now.
Edit: I just found something interesting.
I appended "echo foo" to the last line of trueline like this:
PROMPT_COMMAND=_trueline_prompt_command && echo foo
And look where foo is output when opening a terminal.
bash: v: command not found
foo
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
Which means that the syntax errors happen after the end of the script?
Also, I found out why the error bash: v: command not found
appears. There's a "v" on line 316.
Apparently so. Can you:
echo $P1
and echo $PROMPT_COMMAND
and report the outputbash --rcfile ~/test_bashrc
where test_bashrc
only has the source truline.sh
line? And see if the errors continueAlso, I found out why the error bash: v: command not found appears. There's a "v" on line 316.
Where exactly? I cannot see it here https://github.com/petobens/trueline/blob/1ad7a16284450f6178ad40ca387298fa8daab0c4/trueline.sh#L316
Where exactly? I cannot see it here
I just looked through that too. For some reason mine had a "v", but yours doesn't. Which is really weird, considering that all I did was download the file and remove the extension.
Run echo $P1 and echo $PROMPT_COMMAND and report the output
P1:
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
PROMPT_COMMAND:
_trueline_prompt_command
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
Try running simply bash --rcfile ~/test_bashrc where test_bashrc only has the source truline.sh line? And see if the errors continue
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
The errors do continue.
I just looked through that too. For some reason mine had a "v", but yours doesn't. Which is really weird, considering that all I did was download the file and remove the extension.
So the v
thing is sorted out now right?
P1
Sorry I meant echo $PS1
So the v thing is sorted out now right?
Yep.
Sorry I meant echo $PS1
\[\033[38;2;36;39;46;48;2;208;208;208;1m\] valley \[\033[0m\]\[\033[38;2;208;208;208;48;2;59;64;72;1m\]\[\033[0m\]\[\033[38;2;171;178;191;48;2;59;64;72;2m\] master \[\033[0m\]\[\033[38;2;224;108;117;48;2;59;64;72;2m\]✚ 12 \[\033[0m\]\[\033[38;2;198;120;221;48;2;59;64;72;2m\] 0 0 0 0 \[\033[0m\]\[\033[38;2;59;64;72;48;2;40;44;52;1m\]\[\033[0m\]\[\033[38;2;130;137;151;48;2;40;44;52;2m\] \[\033[1m\] \[\033[0m\]\[\033[38;2;40;44;52;48;2;36;39;46;1m\]\[\033[0m\]
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
Mmm; can you try removing the if conditions in lines 265 and 294 and see if the errors go away? I think it might be that...
I still get the same errors, but now everything in the prompt turns invisible except for the actual text.
This is how the prompt looks (the "|" signifies location of cursor, it's not part of the prompt):
valley master 12 0 0 0 0 . |
If you run the following foo.sh
file with bash foo.sh
:
if [[ "${#TRUELINE_COLORS[@]}" -eq 0 ]]; then
declare -A TRUELINE_COLORS=(
[black]='36;39;46'
)
fi
echo "${TRUELINE_COLORS[@]}"
do you still get errors? If you do, then try running bar.sh
:
declare -A TRUELINE_COLORS=(
[black]='36;39;46'
)
echo "${TRUELINE_COLORS[@]}"
foo.sh:
36;39;46
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
bar.sh
36;39;46
bash: [[: 0 0: syntax error in expression (error token is "0")
bash: [[: 0 0: syntax error in expression (error token is "0")
So even when running bash foo.sh
where foo only has a line echo "foo"
you get this error? That's strange and I don't see clearly how it's releated to trueline...
So even when running bash foo.sh where foo only has a line echo "foo" you get this error?
I thought you said to put:
if [[ "${#TRUELINE_COLORS[@]}" -eq 0 ]]; then
declare -A TRUELINE_COLORS=(
[black]='36;39;46'
)
fi
echo "${TRUELINE_COLORS[@]}"
in foo.sh?
That's strange and I don't see clearly how it's releated to trueline...
This only happens when trueline is sourced.
This only happens when trueline is sourced.
Can you try to bisect the problem yourself since I cannot reproduce it? I.e
.bashrc
with the source trueline.sh
line and start bash with bash --rcfile path_to_that_minimial_bashrc
. trueline.sh
file and see if the error still pops out (i.e by resourcing the file or by opening a new bash shell)only use a .bashrc with the source trueline.sh line and start bash with bash --rcfile path_to_that_minimial_bashrc.
I've already done that.
Try next commenting/deleting functions in the trueline.sh file and see if the error still pops out (i.e by resourcing the file or by opening a new bash shell)
I'll work on doing that.
Since the original issue (in the title) is now fixed I'm going to close this one now to keep the issue tracker ordered. If you find a consistent way to reproduce your second problem please open a new issue. Thanks!
Everything still works perfectly fine, however this error pops up whenever I open my terminal.
On the plus side, it only happens once. It's still pretty annoying to see it whenever I open my terminal though.
I took a quick look through the script, and couldn't find a mention of a program called 'v'. I also ran it through shellcheck and couldn't find any errors.