gpt4 book ai didi

linux - 将目录更改为 bash 中父/调用脚本的路径

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:40 24 4
gpt4 key购买 nike

我有几十个脚本,都在不同的目录中。 (导出/扩展的 Talend 作业)

此时每个作业都有 1 或 2 个脚本,从相同的行开始,最重要的一个:

CD ***path-to-script***

还有几行设置 Java 路径和启 Action 业。

我想创建一个脚本,它将从所有这些脚本中运行。例如:

/scripts/talend.sh

在所有 talend 脚本中,第一行将运行 /scripts/talend.sh,这些脚本的运行位置的一些示例:

/talend-job1_0.1/talend-job1_0.1/talend-job1/talend-job1.sh
/talend-task2_0.1/talend-task2_0.1/talend-task2/talend-task2.sh
/talend-job3_0.1/talend-job3_0.1/talend-job3/talend-job3.sh

我如何确定 /scripts/talend.sh 的起始位置,以便我可以从 /scripts/talend.sh CD 到该路径。

Talend 脚本不是从目录本身运行,而是从 cronjob 或不同的用户主目录运行。

编辑:该问题被标记为重复,但是 Getting the source directory of a Bash script from within没有 100% 回答我的问题。问题是: - 从不同的脚本调用基本脚本 - 这些不同的脚本可以从命令行运行,有、有或没有符号链接(symbolic link)。 - $0、$BASH_SOURCE 和 pwd 都做了一些事情,但没有提到解决所有困难的解决方案。

例子:

/scripts/talend.sh   

在这个脚本中我要配置Java的$PATH和$HOME_PATH,CD到Talend作业所在的地方。 (这是一个包,因此必须从该位置运行该脚本)。

例如,作业的路径是:

/u/talend/talendjob1/sub../../talendjob1.sh 
/u/talend/talendjob2/sub../../talendjob2.sh
/u/talend/talendjob3/sub../../talendjob3.sh

多个作业从 TMS 应用程序运行。此应用程序无法使用全名运行这些脚本(太长,名称只能是 6 长),所以在不同的位置我有符号链接(symbolic link):

/u/tms/links/p00001 -> /u/talend/talendjob1/sub../../talendjob1.sh
/u/tms/links/p00002 -> /u/talend/talendjob1/sub../../talendjob2.sh
/u/tms/links/p00003 -> /u/talend/talendjob1/sub../../talendjob3.sh
/u/tms/links/p00004 -> /u/talend/talendjob1/sub../../talendjob4.sh

我想您已经大致了解了复杂性以及为什么我只需要一个基本的 talend 脚本,而我可以在其中保留所有基本内容。但我只能这样做,如果我知道 Talend 脚本的来源,因为我必须在那里开始那个 talend 工作。

最佳答案

这些答案(除了第一个)是特定于 Linux 的,但在那里应该非常稳健——使用包含空格、文字换行符、通配符等的目录名。


要更改到您自己的源目录(其他地方的常见问题解答):

cd "$(basename "$BASH_SOURCE")"

切换到父进程的当前目录:

cd "/proc/$PPID/cwd"

如果您想切换到作为第一个命令行参数传递给父进程的目录:

{ IFS= read -r -d '' _ && IFS= read -r -d '' argv1; } <"/proc/$PPID/cmdline"
cd "$argv1"

也就是说,就我个人而言,我只是将作业目录导出到父进程中的环境变量,然后在子进程中读取该环境变量。简单得多、更便携、更准确,并且符合最佳流程。

关于linux - 将目录更改为 bash 中父/调用脚本的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30169686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com