디렉토리를 변경하려면 쉘 스크립트에서 -d를 사용하십시오.

디렉토리를 변경하려면 쉘 스크립트에서 -d를 사용하십시오.

사용자에게 다른 디렉토리에서 스크립트를 실행할 수 있는 옵션을 제공하려고 합니다. 그러나 스크립트가 디렉터리를 변경하면 명령이 작동하지 않습니다 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의 경우 중요함).

관련 정보