사용자에게 다른 디렉토리에서 스크립트를 실행할 수 있는 옵션을 제공하려고 합니다. 그러나 스크립트가 디렉터리를 변경하면 명령이 작동하지 않습니다 mkdir
. 다음과 같이 디렉토리를 변경합니다.
case $1 in
"-d")
PWD=$2;;
*)
;;
esac
하지만 스크립트를 실행하면 스크립트가 존재하는 디렉터리에서 실행됩니다. 디렉토리는 변경되지 않습니다.
전체 코드는 다음과 같습니다.
#!/bin/bash
#File sorter
set -e # Abort in case of error
START=$(date +"%T")
SAVEIFS=$IFS
case $1 in
"-d")
PWD=$2;;
*)
;;
esac
echo "trigger took place in $PWD"
for i in *; do
echo "processing \"$i\" ..."
case $i in
*.zip)
[ -d archive ] || mkdir archive
mkdir "archive/${i%.*}"
unzip -d "archive/${i%.*}" "./$i"
echo -e "\"$i\" extracted in $PWD/archive/${i%.*}" >> report.txt;;
*.*)
mkdir -p "${i##*.}"
mv -- "$i" "${i##*.}/"
echo -e "\"$i\" moved to $PWD/${i##*.}" >> report.txt;;
*)
tmp=$(TMPDIR=. mktemp -d)
mv -- "$i" "$tmp/"
mv -- "$tmp" "$i";;
esac
done
echo "Done in $SECONDS seconds!"
END=$(date +"%T")
echo "Start time: $START" >> report.txt
echo "End time: $END" >> report.txt
답변1
PWD
나는 변화가 아무 것도 하지 않았다는 사실에 놀라지 않습니다.
그냥 만들어cd "$2"
하지만 스크립트를 실행하면 스크립트가 존재하는 디렉터리에서 실행됩니다.
이를 실행하는 셸의 작업 디렉터리에서 실행됩니다. 스크립트 디렉토리에 있다면 예, 스크립트가 그곳에서 실행될 것입니다.
답변2
이 PATH
변수는 쉘이 사용할 프로그램을 찾는 데 사용하도록 예약되어 있습니다. :
프로그램을 찾을 때까지 순차적으로 검색되는 디렉토리 목록으로 콜론( )으로 구분됩니다. 맨페이지에서bash
길
명령에 대한 검색 경로입니다. 이는 쉘이 명령을 찾는 콜론으로 구분된 디렉토리 목록입니다(아래 명령 실행 참조). PATH 값의 길이가 0인(빈) 디렉터리 이름은 현재 디렉터리를 나타냅니다. 빈 디렉터리 이름은 인접한 두 개의 콜론이나 선행 또는 후행 콜론으로 나타날 수 있습니다. 기본 경로는 시스템에 따라 다르며 bash를 설치한 관리자가 설정합니다. 일반적인 값은 "/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin"입니다.
이 변수를 변경하면 쉘이 프로그램을 찾는 방식이 변경됩니다(예: mkdir
.
변수를 path
또는 로 변경하는 것이 좋습니다 dir
(Linux/UNIX의 경우 중요함).