Como analisar opções em uma função de shell para navegar em vários projetos

1

Eu posso usar ajuda com esse pouco de bash que estou tentando escrever. O propósito dos scripts é acelerar o meu desenvolvimento enquanto trabalho com vários projetos. Rotulei as partes sobre as quais tenho perguntas no código.

# is there a way to persist this through working enviornments besides this?
declare -x WORKING='cat ~/.working'

#alias p='builtin cd $WORKING && pwd && ls'
alias pj='builtin cd $WORKING/public/javascripts && pwd && ls'

function pp {
echo 'pwd' > ~/.working
}


# is there a way to close the scope of this function?
function p {

  # how do I process flags here?
  # -f and -d etc. can exist but may not
  # either way I want $1 to be set to the first string if there
  # is one


  if [ -z "$1" ]
  then
    echo '*'
    builtin cd $WORKING && pwd && ls
    return
  fi



  BACK='pwd'
  builtin cd $WORKING

  #f='find . -iname "$1"'
  f=( 'echo $(find . -type d -o -type f -iname "$1") | grep -v -E "git|node"' )
  #echo ${f[1]}

  if [ -z "${f[0]}" ]
  then
    return
  fi


  if [ -z "${f[1]}" ]
  then
    # how can I write this as a switch?
    if [ -f ${f[0]} ]
    then
      vim ${f[0]}
      return
    fi
    if [ -d ${f[0]} ]
    then
      builtin cd ${f[0]}
      return
    fi
  else
    echo "multiple found"
  #for path in $f
  #do
  # sort files and dirs
  #  sort dirs by path
  #  sort files by path
    #done

  #  display dirs one color
  #  display files another color
  #     offer choices
  #     1) open all files
  #     2) open a file
  #     3) cd to selected directory
  #     4) do nothing

  fi


 # nothing found
 builtin $BACK
}
    
por Prospero 03.11.2012 / 16:36

2 respostas

1

# is there a way to persist this through working enviornments besides this?
declare -x WORKING='cat ~/.working'

Talvez use:

export WORKING=$(cat ~/.working)

Isso deve adicioná-lo ao seu ambiente até a reinicialização.

Você deve poder fazer referência a isso mais tarde usando

echo $WORKING

no prompt.

    
por 03.11.2012 / 16:50
1

Para a persistência de variáveis, você precisa de um mecanismo que não seja a memória principal. Os arquivos são uma boa escolha. Aqui eu uso um atalho bash para $(cat filename)

declare -x WORKING=$(< ~/.working)

Você não precisa echo $(pwd) , apenas pwd

function pp { pwd > ~/.working; } 

Por "fechar o escopo", suponho que você queira manter as variáveis locais locais na função: use o local builtin

function p {

  local OPTIND OPTARG
  local optstring=':fd'  # declare other options here: see "help getopts"
  local has_f=false has_d=false

  while getopts $optstring option; do
    case $option in
      f) has_f=true ;;
      d) has_d=true ;;
      ?) echo "invalid option: -$OPTARG"; return 1 ;;
    esac
  done
  shift $((OPTIND - 1))

  if $has_f ; then
    do something if -f

  elif $has_d ; then
    do something if -d
  fi

  # ... whatever else you have to do ...
}
    
por 04.11.2012 / 13:49