Altere o diretório com -d no shell script

3

Estou tentando dar a opção para os usuários executarem o script em um diretório diferente. No entanto, quando o script altera o diretório, o mkdir não funciona. Eu mudo o diretório assim:

case $1 in
 "-d")
   PWD=$2;;
   *)
     ;;
esac

mas quando executo o script, ele é executado no diretório em que ele existe. não muda o diretório.

aqui está o código completo:

#!/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
    
por Erfan 04.03.2012 / 11:50

2 respostas

3

Não me surpreende que a alteração de PWD não faça nada.

Basta fazer um cd "$2"

but when I run the script, it runs in the directory that it exists.

Ele é executado no diretório de trabalho do shell que você executou. Se você estiver no diretório do script, então sim, ele será executado lá.

    
por 04.03.2012 / 12:05
1

A variável PATH é reservada para encontrar programas que o shell utilizará. É uma lista de diretórios, separados por dois-pontos ( : ), que é pesquisado em ordem até que o programa seja encontrado. Na manpage de bash

PATH

The search path for commands. It is a colon-separated list of directories in which the shell looks for commands (see COMMAND EXECUTION below). A zero-length (null) directory name in the value of PATH indicates the current directory. A null directory name may appear as two adjacent colons, or as an initial or trailing colon. The default path is system-dependent, and is set by the administrator who installs bash. A common value is ''/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin''.

Se você alterar essa variável, ela mudará como o shell encontra programas, como mkdir .

Sugiro alterar a variável para path ou dir (o caso é importante no Linux / UNIX).

    
por 04.03.2012 / 04:18

Tags