我想编写一个perl脚本,将其工作目录更改为其他位置,执行某些操作,然后在我从shell调用它之后将其留在该目录中。 chdir
只做第一部分。如何更改调用者的工作目录?
答案 0 :(得分:9)
此 可能。
但是,您必须以读/写模式打开其中一个/dev/mem
设备,在内存中找到存储父进程的[dev,ino]
对cwd
对的正确位置,并用新的戳它。
即使你成功了,我怀疑你第二天早上能看到自己在镜子里。我确定知道我永远不可能。 :)尽管如此,我的同事脸上的完整奇迹看起来还是值得的。我使用这种方法将shell的提示从一个命令更改为下一个命令。这很珍贵。直到我告诉他们我是怎么做的,他们才弄明白。
这也不推荐。 :)
答案 1 :(得分:5)
你想做什么是不可能的。最接近的是写一些bash来做你想要的,然后在调用shell中,来源而不是运行它。软件不能影响调用它的shell。
答案 2 :(得分:5)
将perl脚本包装在shell脚本中,在执行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
(现在你可以使用heredoc语法并将其全部放入一个脚本中:
#!/usr/bin/bash
cd /my/directory
perl <<EOF
... include your perl script here ...
EOF
但我认为你不能使用@ARGV
变量)
答案 3 :(得分:2)
您可以执行以下操作来模拟效果: