作業ディレクトリを別の場所に変更し、何かを実行し、シェルから呼び出した後、そのディレクトリに私を残す perl スクリプトを作成したいと考えています。 chdir
最初の部分だけを行います。呼び出し元の作業ディレクトリを変更するにはどうすればよいですか?
4 に答える
これは可能です。
ただし、/dev/mem
デバイスの 1 つを読み取り/書き込みモードで開き、その親プロセスの[dev,ino]
ペアを格納するメモリ内の適切な場所を見つけcwd
て、新しいデバイスで突く必要があります。
できたとしても、翌朝鏡で自分を見ることができるとは思えません。私は決してできなかったと確信しています。:) それでも、私の同僚の顔の完全な驚きの表情は、どういうわけかそれだけの価値がありました. この方法を使用して、シェルのプロンプトをあるコマンドから次のコマンドに変更しました。貴重なものばかりでした。私がどうやってそれをやったかを彼らに話すまで、彼らはそれを理解できませんでした.
これもお勧めできません。:)
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
しかし、私はあなたが変数を使うことができるとは思わない)
あなたがしたいことは不可能です。最も近いのは、必要なことを行うbashを作成し、呼び出し元のシェルで、実行する代わりにそれをソースすることです。ソフトウェアは、それを呼び出すシェルに影響を与えることはできません。
効果をシミュレートするには、次の操作を実行できます。
- exec でスクリプトを呼び出します
- スクリプトで、終了する代わりに、新しいシェルを実行します。