0
#!/usr/bin/ksh


if [ $# -ne 1 ]; then
        echo "[*]\t Please see usage..."
        echo "[*]\t Usage: $0 <store_number>"
        exit 1
fi


if [ -z "$1" ]; then
        echo "[*]\t Please see usage..."
        echo "[*]\t Usage: $0 <store_number>"
  exit 1
fi


Store_Number=$1
EPS_Directory="/apps/epsadmin_90000"$Store_Number"/EPS"


cd $EPS_Directory

メイン シェルのディレクトリを変更する簡単なスクリプトを作成しようとしています。サブシェル (上記参照) 内でディレクトリを変更する作業を行っていますが、明らかにスクリプトの実行が完了すると、外側のシェルに戻り、元のディレクトリに戻ります。

サブシェル内から外部シェルにコマンドを渡すことは可能ですか? 外部シェルに cd コマンドを渡すことはできますか?

たとえば、私が実行した場合:

./cd.sh 2001

ディレクトリを次のようにしたい:

/apps/epsadmin_900002001/EPS

一旦外殻に戻ります。

4

2 に答える 2

2

いいえ、これは不可能です。

代わりに、関数を作成できます。

mycd() {
  if [ $# -ne 1 ]; then
    echo "[*]\t Please see usage..."
    echo "[*]\t Usage: $0 <store_number>"
    return 1
  fi

  if [ -z "$1" ]; then
    echo "[*]\t Please see usage..."
    echo "[*]\t Usage: $0 <store_number>"
    return 1
  fi

  Store_Number=$1
  EPS_Directory="/apps/epsadmin_90000$Store_Number/EPS"

  cd "$EPS_Directory"
}

...そしてそれを独自のファイルに保存し、それをソースします:

. $HOME/.fun/mycd.sh

サブプロセスで実行されるスクリプトとは異なり、シェル関数はメイン プロセスで実行されます。

于 2014-04-11T23:09:52.173 に答える
0

ご助力いただきありがとうございます!これが私の解決策です。

#   create dj file in /users/(YOUR_NUID) directory
#   paste the dj function into this file.   (vi dj)  (hit i to enter edit mode) (right click to paste)  (hit esc)  (type :wq)
#   source the dj file containing dj() functon by adding this to .profile:
#   . $HOME/dj
#   reload .profile by typing . ./.profile

#   then to run the function simply type dj <storenumber> to jump between EPS directory folders.


dj(){

Store_Number=$1
EPS_Directory="/apps/epsadmin_90000"$Store_Number"/EPS"

    if [ -e $(echo $EPS_Directory) ]; then
        cd $EPS_Directory
        echo "You are now in directory: $EPS_Directory"
    else
        echo "Directory $EPS_Directory does not exist."
    fi 

}
于 2014-04-16T16:24:39.913 に答える