使用Linux shell,如何启动与当前工作目录不同的工作目录的程序?
例如,我有一个二进制文件helloworld,它在当前目录中创建了文件hello-world.txt。 这个文件在目录/a中。
目前,我在目录/b。我想启动我的程序运行..然后在第三个目录/c中获取hello-world.txt。
使用Linux shell,如何启动与当前工作目录不同的工作目录的程序?
例如,我有一个二进制文件helloworld,它在当前目录中创建了文件hello-world.txt。 这个文件在目录/a中。
目前,我在目录/b。我想启动我的程序运行..然后在第三个目录/c中获取hello-world.txt。
当前回答
一个不需要子shell并且内置于bash的选项
(pushd SOME_PATH && run_stuff; popd)
演示:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit
其他回答
只要把最后一个“&&”改成“;”,不管命令执行成功还是失败,它都会返回cd:
cd SOME_PATH && run_some_command ; cd -
一个不需要子shell并且内置于bash的选项
(pushd SOME_PATH && run_stuff; popd)
演示:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit
如果你想在你的程序中执行这个,那么我会这样做:
#include <unistd.h>
int main()
{
if(chdir("/c") < 0 )
{
printf("Failed\n");
return -1 ;
}
// rest of your program...
}
如果您总是希望它到/C,那么在写入文件时使用绝对路径。
我一直认为UNIX工具应该编写为过滤器,从stdin读取输入,并将输出写入stdout。如果可能的话,您可以更改helloworld二进制文件,将文本文件的内容写入标准输出,而不是特定的文件。这样,您就可以使用shell在任何地方写入文件。
$ cd ~/b
$ ~/a/helloworld > ~/c/helloworld.txt