CD в ​​конкретный каталог изменяет переменную PATH - PullRequest
1 голос
/ 19 июня 2019

Когда я изменяю каталог (cd) на один конкретный каталог (который содержит приложение rails), он изменяет переменную PATH, удаляя многие каталоги из PATH, включая / bin, / usr / bin и / usr / local / bin, послечто я получаю много ошибок bash «команда не найдена» для таких команд, как which, ls, grep и т. д. Похоже, что это только тот каталог, который вызывает проблему, когда я перехожу в него или пишу из него.Я не вижу очевидных файлов в каталоге, которые бы изменяли переменную PATH таким образом.Перед входом в каталог мой PATH выглядит следующим образом:

$ echo $PATH
/usr/local/opt/node@10/bin:/usr/local/opt/postgresql@9.4/bin:/Users/cedric/.rbenv/shims:/Users/cedric/.rbenv/shims:/Users/cedric/.rvm/gems/ruby-2.3.7/bin:/Users/cedric/.rvm/gems/ruby-2.3.7@global/bin:/Users/cedric/.rvm/rubies/ruby-2.3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/cedric/.rvm/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin/AWS_Tools/AutoScaling-1.0.61.6/bin:/usr/local/bin/AWS_Tools/CloudWatch-1.0.20.0/bin:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/api/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/macosx/python2.7/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/macosx/python2.7/eb:/usr/local/mysql/bin:/Users/cedric/.rbenv/bin:/Users/cedric/.rbenv/shims:/usr/local/mysql/bin

После входа в каталог мой PATH выглядит следующим образом:

cedric@Computer togo [develop] $ cd .
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
-bash: cat: command not found
-bash: cat: command not found
-bash: cut: command not found
cedric@Computer togo $ echo $PATH
/Users/cedric/.rvm/gems/ruby-2.3.7@togo/bin:/Users/cedric/.rvm/gems/ruby-2.3.7@global/bin:/Users/cedric/.rvm/rubies/ruby-2.3.7/bin:/Users/cedric/.rvm/bin:
-bash: cut: command not found
cedric@Computer togo $ 

До сегодняшнего дня это не было проблемой,Любые мысли о том, что может быть причиной этого?

Спасибо

ОТВЕТЫ НА КОММЕНТАРИИ:

$ echo "$PROMPT_COMMAND"
update_terminal_cwd;

$ type update_terminal_cwd
update_terminal_cwd is a function
update_terminal_cwd () 
{ 
    local SEARCH=' ';
    local REPLACE='%20';
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}";
    printf '\e]7;%s\a' "$PWD_URL"
}

(кажется, что это просто заменяет "% 20" на "" что угодноPWD_URL есть.)

$ type cd возвращает

cd is a function
cd () 
{ 
    __zsh_like_cd cd "$@"
}

и

$ type __zsh_like_cd
__zsh_like_cd is a function
__zsh_like_cd () 
{ 
    \typeset __zsh_like_cd_hook;
    if builtin "$@"; then
        for __zsh_like_cd_hook in chpwd "${chpwd_functions[@]}";
        do
            if \typeset -f "$__zsh_like_cd_hook" > /dev/null 2>&1; then
                "$__zsh_like_cd_hook" || break;
            fi;
        done;
        true;
    else
        return $?;
    fi
}

На выходе set Нахожу:

chpwd_functions=([0]="__rvm_cd_functions_set")
...
__rvm_after_cd () 
{ 
    \typeset rvm_hook;
    rvm_hook="after_cd";
    if [[ -n "${rvm_scripts_path:-}" || -n "${rvm_path:-}" ]]; then
        source "${rvm_scripts_path:-$rvm_path/scripts}/hook";
    fi
}
...
__rvm_cd_functions_set () 
{ 
    __rvm_do_with_env_before;
    if [[ -n "${rvm_current_rvmrc:-""}" && "$OLDPWD" == "$PWD" ]]; then
        rvm_current_rvmrc="";
    fi;
    __rvm_project_rvmrc 1>&2 || true;
    __rvm_after_cd || true;
    __rvm_do_with_env_after;
    return 0
}

Было много выходных данных для set | grep sed (48 строк), поэтому я искал такой вывод с помощью PATH:

 $ set | grep sed | grep -i path
            \command \cat "$environment_file_path" | __rvm_grep -Eo "[^ ]+=[^;]+" | __rvm_sed -e 's/\$PATH/'"${PATH//\//\\/}"'/' -e 's/\${PATH}/'"${PATH//\//\\/}"'/';
            rvm_silence_logging=1 "$rvm_scripts_path/gemsets" list strings | __rvm_sed "s/ (default)//; s/^/$current_ruby${rvm_gemset_separator:-@}/ ; s/@default// ;"
    __rvm_sed -e 's/#.*$//g' -e 's#\[##g' -e 's#\]##g' < "$rvm_path/config/known" | sort -r | uniq;
         <log>Usually this is caused by shell initialization files. Search for <code>PATH=...</code> entries.
            PATH="$(\sed -E -e 's#/+#/#g' -e 's#/:#:#' <<<$PATH)";
            PATH="$(\sed -r -e 's#/+#/#g' -e 's#/:#:#' <<<$PATH)";
                __rvm_sed_i "$__rvmrc_warning_path" -e "\#^${1}\$# d" -e '/^$/ d';
                __rvm_sed_i "$__rvmrc_warning_path" -e "\#/${__rvmrc_type}\$# d" -e '\#^$# d';
                __rvm_sed_i "$__rvmrc_warning_path" -e "\#^${1}\$# d" -e '\#^$# d';

Кроме того, при поиске мест, где установлен PATH, кажется, как будто все они включают исходное значение PATH в новое значение:

$ set | grep "\<PATH *="
PATH=/usr/local/opt/node@10/bin:/usr/local/opt/postgresql@9.4/bin:/Users/cedric/.rbenv/shims:/Users/cedric/.rbenv/shims:/Users/cedric/.rvm/gems/ruby-2.3.7/bin:/Users/cedric/.rvm/gems/ruby-2.3.7@global/bin:/Users/cedric/.rvm/rubies/ruby-2.3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/cedric/.rvm/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin/AWS_Tools/AutoScaling-1.0.61.6/bin:/usr/local/bin/AWS_Tools/CloudWatch-1.0.20.0/bin:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/api/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/macosx/python2.7/:/usr/local/bin/AWS_Tools/AWS-ElasticBeanstalk-CLI-2.6.3/eb/macosx/python2.7/eb:/usr/local/mysql/bin:/Users/cedric/.rbenv/bin:/Users/cedric/.rbenv/shims:/usr/local/mysql/bin
            PATH="$2:$PATH"
            PATH="$PATH:$2"
        PATH="${rvm_user_path_prefix}:$PATH";
            PATH="$PATH:${rvm_bin_path}";
            PATH="${rvm_bin_path}:$PATH";
    printf "%b" "export PATH=\"${__path}:\$PATH\"\n" > "$file_name";
    PATH="${_new_path[*]}:$PATH";
    env | __rvm_grep -E '^GEM_HOME=|^GEM_PATH=|^PATH=';
         <log>Usually this is caused by shell initialization files. Search for <code>PATH=...</code> entries.
                        PATH="${save_PATH}";
            PATH="$(\sed -E -e 's#/+#/#g' -e 's#/:#:#' <<<$PATH)";
            PATH="$(\sed -r -e 's#/+#/#g' -e 's#/:#:#' <<<$PATH)";
                    command_to_run=(/usr/bin/env PATH="${PATH}${missing_paths}" "${command_to_run[@]}");
        PATH="${_OLD_VIRTUAL_PATH}";
    PATH="${__path_prefix:-}${__path_prefix:+:}$__save_PATH${__path_suffix:+:}${__path_suffix:-}";

Поднимает ли кто-либо из вышеперечисленных красные флаги в качестве возможного виновника?Должен ли я проверять что-то более конкретное?

ОТВЕТ НА @Roadowl (в этом каталоге):

 $ /bin/ls -la -- -*
ls: -*: No such file or directory
...