내가 작성하려는 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 ...
}