3

作業ディレクトリを別の場所に変更し、何かを実行し、シェルから呼び出した後、そのディレクトリに私を残す perl スクリプトを作成したいと考えています。 chdir最初の部分だけを行います。呼び出し元の作業ディレクトリを変更するにはどうすればよいですか?

4

4 に答える 4

9

これ可能です。

ただし、/dev/memデバイスの 1 つを読み取り/書き込みモードで開き、その親プロセスの[dev,ino]ペアを格納するメモリ内の適切な場所を見つけcwdて、新しいデバイスで突く必要があります。

できたとしても、翌朝鏡で自分を見ることができるとは思えません。私は決してできなかったと確信しています。:) それでも、私の同僚の顔の完全な驚きの表情は、どういうわけかそれだけの価値がありました. この方法を使用して、シェルのプロンプトをあるコマンドから次のコマンドに変更しました。貴重なものばかりでした。私がどうやってそれをやったかを彼らに話すまで、彼らはそれを理解できませんでした.

これもお勧めできません。:)

于 2011-05-10T20:30:08.683 に答える
5

perlスクリプトをシェルスクリプトでラップし、perlスクリプトを実行する前にbashスクリプトからディレクトリを変更し、スクリプトを入手します。

したがって、次のようなPerlスクリプトの代わりに:

#!/usr/bin/perl
# my_program.pl ...
chdir "/my/directory";
...

たとえば、次のようなbashスクリプトを使用します。

#!/usr/bin/bash
cd /my/directory
perl my_program.pl "$@"

スクリプトを呼び出すときにスクリプトを調達します。

$ source my_bash.sh

また

$ . my_bash.sh

(これで、ヒアドキュメント構文を使用して、すべてを1つのスクリプトにまとめることができます。

#!/usr/bin/bash
cd /my/directory
perl <<EOF
... include your perl script here ...
EOF

@ARGVしかし、私はあなたが変数を使うことができるとは思わない)

于 2011-05-10T20:14:31.897 に答える
5

あなたがしたいことは不可能です。最も近いのは、必要なことを行うbashを作成し、呼び出し元のシェルで、実行する代わりにそれをソースすることです。ソフトウェアは、それを呼び出すシェルに影響を与えることはできません。

于 2011-05-10T19:30:32.150 に答える
2

効果をシミュレートするには、次の操作を実行できます。

  1. exec でスクリプトを呼び出します
  2. スクリプトで、終了する代わりに、新しいシェルを実行します。
于 2011-05-10T19:32:29.270 に答える