ディレクトリを変更するには、シェルスクリプトで -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の(空の)ディレクトリ名は、現在のディレクトリを表します。空のディレクトリ名は、2 つの隣接するコロン、または先頭または末尾のコロンとして表示できます。デフォルトのパスはシステムによって異なり、bashをインストールした管理者が設定します。一般的な値は「/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin」です。

この変数を変更すると、シェルがプログラムを見つける方法が変わりますmkdir

変数をpathまたはに変更することをお勧めしますdir(Linux / UNIXの場合は重要です)。

関連情報