lẽ là giải pháp đơn giản nhất là sử dụng:
alias cdc='cd /Users/User/.../.../.../.../.../Dev/C'
alias cdbin='cd /Users/User/.../.../.../.../.../Dev/bin'
alias cdtst='cd /Users/User/.../.../.../.../.../Dev/tst'
nếu bạn chỉ thực sự làm việc trên một dự án cùng một lúc. Nếu bạn làm việc trên nhiều dự án, bạn có thể có một bí danh khác đã thay đổi các thư mục trong các bí danh trên.
Vì vậy, bạn muốn sử dụng cái gì đó như:
proj game17
cdc
make
proj roman_numerals
cdbin
rm -f *
proj game17 ; cdc
Do đây là một điều hữu ích để có, tôi quyết định đặt cùng một loạt các kịch bản có thể được sử dụng. Tất cả chúng đều dựa trên một tệp cấu hình mà bạn đặt trong thư mục chính của bạn, cùng với các bí danh cho các tập lệnh nguồn. Các tập tin "~/.cdx_data"
có dạng:
scrabble:top=~/dev/scrabble
scrabble:src=~/dev/scrabble/src
scrabble:bin=~/dev/scrabble/bin
sudoku:top=~/dev/scrabble
sudoku:src=~/dev/scrabble/src
sudoku:bin=~/dev/scrabble/bin
sudoku:data=~/dev/scrabble/data
và liệt kê tất cả các dự án có liên quan (gải và sodoku trong trường hợp này) và thư mục của họ (có thể khác nhau đối với từng dự án, nhưng có đầu, bin, src và dữ liệu trong ví dụ này).
Hành động đầu tiên là khởi tạo thứ, vì vậy đặt:
. ~/.cdx_init
ở phần cuối của bạn.bash_profile và tạo tệp "~/.cdx_init"
dưới dạng:
alias cdxl='. ~/.cdx_list'
alias projl='. ~/.cdx_projlist'
alias cdx='. ~/.cdx_goto'
alias proj='. ~/.cdx_proj'
Điều này thiết lập bốn bí danh để nguồn các tệp mà tôi sẽ đưa vào bên dưới. Cách sử dụng là:
cdxl - List all directories in current project.
projl - List all projects.
proj - Show current project.
proj <p> - Set current project to <p> (if allowed).
cdx - Show current project/directory and expected/actual real
directory, since they can get out of sync if you mix cd and cdx.
cdx . - Set actual real directory to expected directory (in other words,
get them back into sync).
cdx <d> - Set directory to <d> (if allowed).
Tập lệnh thực tế theo sau. Đầu tiên, ".cdx_list"
chỉ liệt kê các thư mục được phép trong dự án hiện tại (các đường ống được chia thành nhiều dòng để dễ đọc nhưng tất cả chúng đều nằm trên một dòng).
echo "Possible directories are:"
cat ~/.cdx_data
| grep "^${CDX_PROJ}:"
| sed -e 's/^.*://' -e 's/=.*$//'
| sort -u
| sed 's/^/ /'
Tương tự, ".cdx_projlist"
thấy tất cả các dự án khả thi:
echo "Possible projects are:"
cat ~/.cdx_data
| grep ':'
| sed 's/:.*$//'
| sort -u
| sed 's/^/ /'
Trong kịch bản thịt, ".cdx_proj"
bộ và/hoặc cho thấy dự án hiện tại:
if [[ "$1" != "" ]] ; then
grep "^$1:" ~/.cdx_data >/dev/null 2>&1
if [[ $? != 0 ]] ; then
echo "No project name '$1'."
projl
else
export CDX_PROJ="$1"
fi
fi
echo "Current project is: [${CDX_PROJ}]"
và ".cdx_goto"
là như nhau cho các thư mục trong dự án:
if [[ "$1" == "." ]] ; then
CDX_TMP="${CDX_DIR}"
else
CDX_TMP="$1"
fi
if [[ "${CDX_TMP}" != "" ]] ; then
grep "^${CDX_PROJ}:${CDX_TMP}=" ~/.cdx_data >/dev/null 2>&1
if [[ $? != 0 ]] ; then
echo "No directory name '${CDX_TMP}' for project '${CDX_PROJ}'."
cdxl
else
export CDX_DIR="${CDX_TMP}"
cd $(grep "^${CDX_PROJ}:${CDX_DIR}=" ~/.cdx_data
| sed 's/^.*=//'
| head -1
| sed "s:^~:$HOME:")
fi
fi
CDX_TMP=$(grep "^${CDX_PROJ}:${CDX_DIR}=" ~/.cdx_data
| sed 's/^.*=//'
| head -1
| sed "s:^~:$HOME:")
echo "Current project is: [${CDX_PROJ}]"
echo "Current directory is: [${CDX_DIR}]"
echo " [${CDX_TMP}]"
echo "Actual directory is: [${PWD}]"
unset CDX_TMP
Nó sử dụng ba biến môi trường được đặt trước để sử dụng riêng: "CDX_PROJ"
, "CDX_DIR"
và "CDX_TMP"
. Khác với các tệp và bí danh đã đề cập ở trên, không có tài nguyên nào khác được sử dụng. Đó là giải pháp đơn giản nhất nhưng dễ thích nghi nhất mà tôi có thể nghĩ ra. May mắn nhất.
Lời cảm ơn tuyệt vời dành cho mẹo! –
Tôi gặp phải sự cố khi tôi đổi thư mục. Tôi đã giải quyết nó với các biến shell và symlink: Dev = '/ Users/User/Dev /' site = '$ Dev /.../ C /.../ site' Chúng là sự kết hợp rất mạnh mẽ :) –
Đừng quên rằng bạn nên "báo" mở rộng tham số của mình. cd "$ c" Nó cũng làm cho nó hơi cồng kềnh một lần nữa; nhưng bạn ** nên ** dính vào thực hành này. Vì vậy, yeah, symlink có lẽ là cách tốt nhất. – lhunath