歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux中文環境快速進入$HOME目錄“桌面”的辦法

安裝Linux的時候選擇了中文版,桌面的目錄就在 $HOME目錄下的"桌面"目錄;

在gnome terminal要進這個目錄,從RedHat、FC,到RHEL,Ubuntu,沒少煩過我:每次敲cd命令後還要把輸入法切換到中文,再輸入" 桌面";

後來找到一下辦法:在.bashrc中export d=~/桌面/,要進“桌面"目錄也就輸入: "cd $d"

這時,問題又來了:

要把桌面的某個文件移到別的地方,敲mv $d/之後按TAB,bash竟然幫我補全成: "mv \$d/"....無語....

  1. www.linuxidc.com@linuxidc:~$ complete |grep mv  
  2. complete -o default -F _longopt mv  
  3. www.linuxidc.com@linuxidc:~$   
剛開始以為是,default行為或_longopt函數搞的鬼,跟蹤了一下發現_longopt調用了_filedir()函數,_filedir()處理完了還沒有把"$"號變成“\$",結論:bash後面又處理了一下

解決的辦法:在_filedir()函數中把 "$d"替換掉,因此在_filedir()函數最後增加代碼:

  1. local cnt=0  
  2. while [ $cnt -lt ${#COMPREPLY[@]} ];  
  3. do    
  4.     local v=${COMPREPLY[$cnt]}  
  5.     if [[ ${v:0:1} == "{1}quot; ]]; then  
  6.         COMPREPLY[$cnt]=$(eval echo "$v")  
  7.     fi    
  8.     ((cnt++))  
  9. done  
最後_filedir()函數變成:
  1. _filedir()  
  2. {  
  3.     local i IFS=$\'\n\' xspec  
  4.   
  5.     _tilde "$cur" || return 0  
  6.   
  7.     local -a toks  
  8.     local quoted tmp  
  9.   
  10.     _quote_readline_by_ref "$cur" quoted  
  11.     toks=( ${toks[@]-} $(  
  12.         compgen -d -- "$quoted" | {  
  13.             while read -r tmp; do  
  14.                 # TODO: I have removed a "[ -n $tmp ] &&" before 'printf ..',   
  15.                 #       and everything works again. If this bug suddenly   
  16.                 #       appears again (i.e. "cd /b<TAB>" becomes "cd /"),   
  17.                 #       remember to check for other similar conditionals (here   
  18.                 #       and _filedir_xspec()). --David   
  19.                 printf '%s\n' $tmp  
  20.             done  
  21.         }  
  22.     ))  
  23.   
  24.     if [[ "$1" != -d ]]; then  
  25.         # Munge xspec to contain uppercase version too   
  26.         [[ ${BASH_VERSINFO[0]} -ge 4 ]] && \  
  27.             xspec=${1:+"!*.@($1|${1^^})"} || \  
  28.             xspec=${1:+"!*.@($1|$(printf %s $1 | tr '[:lower:]' '[:upper:]'))"}  
  29.         toks=( ${toks[@]-} $( compgen -f -X "$xspec" -- $quoted) )  
  30.     fi  
  31.     [ ${#toks[@]} -ne 0 ] && _compopt_o_filenames  
  32.   
  33.     # If the filter failed to produce anything, try w/o it (LP: #533985)   
  34.     if [[ -n "$1" ]] && [[ "$1" != -d ]] && [[ ${#toks[@]} -lt 1 ]] ; then  
  35.        toks=( ${toks[@]-} $( compgen -f -X -- $quoted) )  
  36.     fi  
  37.   
  38.     COMPREPLY=( "${COMPREPLY[@]}" "${toks[@]}" )  
  39.   
  40.     local cnt=0  
  41.     while [ $cnt -lt ${#COMPREPLY[@]} ];  
  42.     do   
  43.         local v=${COMPREPLY[$cnt]}  
  44.         if [[ ${v:0:1} == "{1}quot; ]]; then  
  45.             COMPREPLY[$cnt]=$(eval echo "$v")  
  46.         fi  
  47.         ((cnt++))  
  48.     done  
  49. }  
Copyright © Linux教程網 All Rights Reserved