相关疑难解决方法(0)

从脚本本身获取Bash脚本的源目录

如何获取其中的目录路径的Bash脚本位于,里面那个脚本?

例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:

$ ./application

directory bash

4672
推荐指数
44
解决办法
158万
查看次数

如何在Mac上获取GNU的readlink -f的行为?

在Linux上,该readlink实用程序接受一个-f跟随其他链接的选项.这似乎不适用于Mac和可能基于BSD的系统.相当于什么?

这是一些调试信息:

$ which readlink; readlink -f
/usr/bin/readlink
readlink: illegal option -f
usage: readlink [-n] [file ...]
Run Code Online (Sandbox Code Playgroud)

macos freebsd sh

341
推荐指数
13
解决办法
11万
查看次数

在Bash中获取目录的父级

如果我有一个文件路径,如...

/home/smith/Desktop/Test
/home/smith/Desktop/Test/
Run Code Online (Sandbox Code Playgroud)

如何更改字符串以使其成为父目录?

例如

/home/smith/Desktop
/home/smith/Desktop/
Run Code Online (Sandbox Code Playgroud)

directory bash dirname

183
推荐指数
7
解决办法
16万
查看次数

Docker中的Docker无法安装卷

我正在运行一个Jenkins集群,在Master和Slave中,它们都作为Docker容器运行.

主机是在MacOS上运行的最新boot2docker VM.

为了让Jenkins能够使用Docker执行部署,我已将docker.sock和docker客户端从主机安装到Jenkins容器,如下所示: -

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v $HOST_JENKINS_DATA_DIRECTORY/jenkins_data:/var/jenkins_home -v $HOST_SSH_KEYS_DIRECTORY/.ssh/:/var/jenkins_home/.ssh/ -p 8080:8080 jenkins
Run Code Online (Sandbox Code Playgroud)

将卷安装到在Jenkins容器内运行的Docker容器时,我遇到了问题.例如,如果我需要在Jenkins容器中运行另一个Container,我会执行以下操作: -

sudo docker run -v $JENKINS_CONTAINER/deploy.json:/root/deploy.json $CONTAINER_REPO/$CONTAINER_IMAGE 
Run Code Online (Sandbox Code Playgroud)

上面运行容器,但文件"deploy.json"不是作为文件挂载,而是作为"目录"挂载.即使我将目录作为卷安装,我也无法查看生成的容器中的文件.

这是一个问题,因为Docker在Docker案例中由于文件权限?

任何指针都会有用!

谢谢!

linux containers jenkins docker

49
推荐指数
5
解决办法
1万
查看次数

导出最后一个目录的名称

正如这个问题所解释的那样,我们可以得到当前工作目录的名称.但是如何获得最后一个目录名?

场景:

# working directory /etc/usr/abc/xyz.txt 
printf '%s\n' "${PWD##*/}" #prints abc
#i want to print usr
printf '%s\n' "%{PWD##*/-1}" #prints me whole path
Run Code Online (Sandbox Code Playgroud)

建议我怎么做.

提前致谢.

linux bash pwd

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

Bash扩展:运行文件或在终端// extglob中运行时,结果不同

在某些脚本中,我想使用当前文件夹内的文件夹名称。我想获取文件夹名称,这里只将有问题的部分放在示例中。如果从终端运行此命令,则会得到:

$ for D in */; do echo ${D%%+(/)} ; done
galaxya8
iphone6s
motog6
motog7

$ echo ${0}
/bin/bash

$ bash --version
GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其放入文件中并运行该文件,则会得到带有斜杠的名称:

$ echo 'for D in */; do echo ${D%%+(/)} ; done' >> test.sh

$ bash test.sh
galaxya8/
iphone6s/
motog6/
motog7/
Run Code Online (Sandbox Code Playgroud)

我在这里看到了bash的扩展。我想念什么?也许只有交互式shell的一些默认值?


最小,完整且可验证的示例(感谢@ kamil-cuk):

$ D=a/; echo ${D%%+(/)}; bash <<<'D=a/; echo ${D%%+(/)}'
a
a/
Run Code Online (Sandbox Code Playgroud)

linux bash

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

标签 统计

bash ×4

linux ×3

directory ×2

containers ×1

dirname ×1

docker ×1

freebsd ×1

jenkins ×1

macos ×1

pwd ×1

sh ×1