标签: working-directory

Docker 如何在 Dockerfile 中保存和恢复 WORKDIR?

我有一个来自图像的 Dockerfile。我想修改它并添加一些文件操作,这些操作将与 FROM 图像给出的不同 WORKDIR 相关。因此,我想在修改 WORKDIR 之前将 WORKDIR 保存到一个变量,并在命令结束后从该变量恢复 WORKDIR。怎么做?

想要的结果:

Dockerfile伪代码:

FROM centos:7
some original commands
some original commands
...
var=WORKDIR #save WORKDIR <== how to do that?

WORDIR /my/path/
my commands
my commands

...
WORKDIR = var # restore path that was before <== how to do that?
Run Code Online (Sandbox Code Playgroud)

restore save working-directory docker dockerfile

3
推荐指数
1
解决办法
5752
查看次数

将 pytest 工作目录更改为测试用例目录

我有以下 pytest 目录结构:

system_tests/
  ??? conftest
  ??? pytest.ini
  ?
  ??? suite_1/
  ?   ??? test_A.py
  ?   
  ??? suite_2/
      ??? sub_suite_2a/
      ?   ??? test_B.py
      ??? sub_suite_2b/
          ??? test_C.py
Run Code Online (Sandbox Code Playgroud)

当每个测试方法运行时,许多第三方库/进程会在当前工作目录中生成工件。当我从sub_suite文件夹中运行 pytest 时(使用 CLI 或 IDE 的“播放”按钮),文件会sub_suite在我想要的文件夹中生成。但是,当我从system_tests文件夹运行 pytest以运行所有测试时,所有工件都在system_tests文件夹中创建,这不是我想要的。

有没有一种简单的方法可以强制 pytest 始终使用测试类文件夹作为工作目录,这样无论我如何或从哪里运行测试我都会得到相同的结果?

python working-directory pytest

3
推荐指数
3
解决办法
5840
查看次数

什么会导致正在执行的应用程序的当前目录发生变化?

我有一个C#应用程序,其中包含以下代码:

string file = "relativePath.txt";

//Time elapses...

string contents = File.ReadAllText(file);
Run Code Online (Sandbox Code Playgroud)

大部分时间都可以正常工作.该文件是相对于启动应用程序的目录读取的.但是,在测试中,已经发现,如果单独放置大约5个小时,该应用程序将抛出一个FileNotFoundException说法"找不到C:\ Documents and Settings\Adminstrator\relativePath.txt".如果立即运行读取文件的操作,则从正确的位置读取文件,我们称之为"C:\ foo\relativePath.txt"

是什么赋予了?而且,什么是最好的解决方案?解决文件Assembly.GetEntryAssembly().Location

.net c# filesystems working-directory

2
推荐指数
2
解决办法
1566
查看次数

Java:如何知道jar在Linux中的位置

在Linux中,JVM将工作目标设置为等于来自用户的homefolder.在Windows中,这是jar所在的文件夹.如何找到罐子(来自我的应用程序)所在位置以更改工作目录?

马亭

java linux jar working-directory

2
推荐指数
1
解决办法
2566
查看次数

C++以编程方式查找可执行根目录的便携方式

可能重复:
如何在C中查找可执行文件的位置

嗨,

我正在寻找一种可移植的方法来查找程序的根目录(在C++中).例如,在Linux下,用户可以将代码复制到/ opt,将其添加到PATH,然后执行它:

cp -r my_special_code /opt/
export PATH=${PATH}:/opt/my_special_code/
cd /home/tony/
execution_of_my_special_code
Run Code Online (Sandbox Code Playgroud)

(其中"execute_my_special_code"是/ opt/my_special_code中的程序).

现在,作为"execution_of_my_special_code"的开发人员,是否有一种可移植的编程方法可以发现可执行文件位于/ opt/my_special_code中?

第二个例子是在MS Windows上:如果我当前的工作目录在一个硬盘驱动器上(例如"C:\")而可执行文件放在另一个硬盘驱动器上(例如"D:\")怎么办?

最终,目标是读取与程序代码一起打包的一些预定义配置文件,而不强制用户进入安装目录.

非常感谢提前!

c++ configuration-files working-directory execution

2
推荐指数
1
解决办法
1888
查看次数

howoto修复工作目录总是回家?(蟒蛇)

这是我的第一个问题.

我的python脚本打开并使用以下简单功能从当前文本文件中读取:

open("config.ini", "r")
Run Code Online (Sandbox Code Playgroud)

因为这是一个相对路径,所以它应该起作用,因为config.ini被放置在同一目录中,就像脚本在启动时一样,应该是当前工作的目录.

事实上,这在我的所有3个Linux机箱上都能完美运行,但我有一个用户需要支持,因为他在打开config.ini时遇到错误.错误提高是因为

os.path.exists("config.ini")
Run Code Online (Sandbox Code Playgroud)

即使文件在那里也返回false!

试图解决这个问题,我们发现使其工作的唯一方法是将config.ini放在他的主目录中,尽管假设工作目录是另一个.

此外,如果我的脚本试图在当前工作目录中创建一个文件,那么该文件总是在他的家庭目录中创建,所以我认为由于某种原因,他的工作目录总是在家!

我该如何解决这个问题?也许我可以引入绝对路径,但我担心os.getcwd()将返回homedir而不是正确的路径.

我是否应该建议这个用户以某种方式修理他的机器?

对不起这个长问题,但英语不是我的第一语言,我是编码的初学者,所以有一些难以解释.

非常感谢你提前!=)

python working-directory home-directory

2
推荐指数
1
解决办法
356
查看次数

R在循环中创建新文件夹

我有10个光栅文件.我想要做的是这样的:

1)读取R中的第一个栅格(光栅文件)

2)将该文件保存在文件夹中(在循环中创建文件夹)

3)再次读取第二个光栅文件

4)将该文件保存在新文件夹中(也在循环中创建)

5)不断重复10次

这是我设法做的:

for (i in 1:10){
    dir.create(paste0("Run",i))      #this creates a new folder called Run[i] where I will save the raster
    setwd(paste0("Run",i))           # this makes the Run[i] my working directory so that my first raster is saved in Run[i]
    moist<-raster(paste0("R://moist_tif/ind_moist",i,".tif"))      # this reads in my raster moist[i]
    writeRaster(moist,"moist.tif")    # this saves my raster  in folder Run[i]
Run Code Online (Sandbox Code Playgroud)

正如您可能注意到循环移动到的那样i+1,Run[i+1]创建了Run[i]我不想要的新文件夹.我想为文件夹中的文件夹Run[i+1]而不是文件夹创建单独的文件夹.希望我能清楚地写出这个问题.谢谢您的帮助.

问候

for-loop r working-directory

2
推荐指数
1
解决办法
4213
查看次数

Git别名:如何将当前目录传递给shell命令?

我在Windows下使用git bash,我想制作一个git alias命令,其概念上是这样的:

[alias]
    assume_unchanged_below = "!git ls-files -z $dir | xargs -0 git update-index --assume-unchanged"
Run Code Online (Sandbox Code Playgroud)

其中$dir扩展到git assume_unchanged_below执行的bash shell中的当前工作目录.

即如果我进入C:\somedir\somesubdir并执行,git assume_unchanged_below我会希望它就像我打字一样git ls-files -z C:\somedir\somesubdir | xargs -0 git update-index --assume-unchanged

似乎可以通过获取当前目录git rev-parse --show-prefix.我也知道可以使用匿名函数传递参数,但我无法将这两个概念结合起来以获得我想要的行为.

例如,如果我这样做:

[alias]
    assume_unchanged_below = "!f() { \
       git ls-files -z $1 | xargs -0 git update-index --assume-unchanged; \
    }; f"
Run Code Online (Sandbox Code Playgroud)

然后我可以输入

git assume_unchanged_below `git rev-parse --show-prefix`
Run Code Online (Sandbox Code Playgroud)

它的行为与预期一致($1正确扩展到当前工作目录).

但是,我不想手动传递git rev-parse --show-prefix给别名,我希望它自动推断,这样我只需要输入

git assume_unchanged_below …
Run Code Online (Sandbox Code Playgroud)

git alias working-directory git-bash git-alias

2
推荐指数
1
解决办法
392
查看次数

通过拖放操作调用的vbscript中的当前工作目录

当我试图获得我的批处理脚本的提升权限时,我发现了两个相关的SO问题

......这导致了部分解决的问题.出于某种原因,我遇到了在VBS脚本中包含空格的文件路径参数的命令行传递问题,所以我试图将解决方案分成3部分并集中在内部(VBS)步骤,然后通过调用a添加最后一步尽管与VBS脚本位于同一文件夹中,但无法找到该VBS中的批处理.我发现,拖放不是"那么简单" 它使用时的不同.vbs,而不是.bat.exe用作放置目标.

这是我的实际问题:

如果我拖动文件并将其拖放到可执行文件(exe)或批处理文件(bat,cmd)上,则当前工作目录由拖动项目的来源确定.其目录设置为处理它的程序或脚本的工作目录.

如果我将文件放到VBS脚本上,则会有所不同.在Windows 8.1 x64上,C:\Windows\System32即使参数与VBS位于同一文件夹中,我也会观察到它.

我可以简单地使用这样的批处理文件(如拖放中继)

my.vbs %*
Run Code Online (Sandbox Code Playgroud)

获得"正常" .bat行为(drop source指示CWD),但我也想了解它.

这是一个错误还是一个功能?它是否与所有Windows版本一致?


编辑:为显示我如何到达的问题添加背景(在顶部)(+次要更正)

windows vbscript drag-and-drop batch-file working-directory

2
推荐指数
1
解决办法
1093
查看次数

如何在Git Bash中设置启动目录?

在Git Bash中设置启动目录的命令是什么?

当我启动Git Bash时,启动目录是C驱动器中的Bitbust目录,因此我必须使用cd命令更改工作目录。

但是我认为这是不必要的过程。我希望启动目录成为启动Git Bash的工作目录。

git working-directory git-bash

2
推荐指数
2
解决办法
1406
查看次数