cd进入特定目录更改PATH变量

时间:2019-06-19 19:26:05

标签: bash path cd

当我将目录(cd)更改为一个特定目录(包含rails应用程序)时,它将更改PATH变量,然后从PATH中删除许多目录,包括/ bin,/ usr / bin和/ usr / local / bin。对于诸如which,ls,grep等命令,我收到许多“找不到命令”的bash错误。当我从其中进行cd或从其中进行cd时,似乎只有一个目录会引起问题。我在目录中看不到任何明显的文件,它们会以这种方式更改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

0 个答案:

没有答案
相关问题