여러 프로젝트를 탐색하기 위해 셸 함수의 옵션을 구문 분석하는 방법

여러 프로젝트를 탐색하기 위해 셸 함수의 옵션을 구문 분석하는 방법

내가 작성하려는 bash에 대한 도움말을 사용할 수 있습니다. 스크립트의 목적은 여러 프로젝트를 작업할 때 개발 속도를 높이는 것입니다. 코드에서 궁금한 부분을 표시해 두었습니다.

# 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
}

답변1

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

아마도 다음을 사용할 수도 있습니다:

export WORKING=$(cat ~/.working)

재부팅할 때까지 환경에 추가해야 합니다.

나중에 다음을 사용하여 이를 참조할 수 있어야 합니다.

echo $WORKING

프롬프트에서.

답변2

변수 지속성을 위해서는 비주요 메모리 메커니즘이 필요합니다. 파일이 좋은 선택입니다. 여기서는 bash 단축키를 사용합니다.$(cat filename)

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

그럴 필요는 없어 echo $(pwd), 그냥pwd

function pp { pwd > ~/.working; } 

"범위를 닫는다"는 것은 지역 변수를 함수에 로컬로 유지한다는 뜻이라고 가정합니다. local내장 함수를 사용하세요.

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 ...
}

관련 정보