bash - 如何通过shell脚本更改当前目录并在那里执行命令?
问题描述
我有这个脚本:
#!/bin/bash
cd ~/my-dir && bash && runall
我将这个脚本添加到我的脚本中$PATH
,当我运行这个脚本时,它首先做了两件事。
- 它更改当前目录并执行 bash,以便我的 shell 也更改当前目录,我可以在那里工作。
- 在此文件夹中运行
runall
(另一个 shell 脚本)。
实际结果:
脚本成功更改了我当前的 shell 目录。但是,runall
不执行。
预期结果:
脚本将我的当前shell目录更改为my-dir
然后执行runall
我该如何解决这个问题?
笔记:
我知道我可以这样做:
cd some-dir/ && runall
但这不会将我当前的会话更改为该目录。我还想更改我当前的 shell 目录。
原因:
我还想更改我当前的工作目录,以便在执行后可以在那里运行其他手动命令runall
。
解决方案
这几乎是Change the current directory from a Bash script的副本,答案非常相似——唯一的区别是附加了要运行的命令。
根本不要使用脚本;相反,在你的~/.bashrc
或类似的,定义一个函数:
runInMyDir() {
cd ~/my-dir || return
runall
}
...定义一个命令runInMyDir
。(如果您想runall
在后台发生,请&
在该行的末尾添加一个)。
如果您确实想要一个脚本,则该脚本需要source
d 而不是在进程外执行 - 当程序作为外壳外部的可执行文件执行时,它在启动之前已经从原始外壳中分离出来,所以它没有机会改变那个shell的行为。因此,如果您创建了一个以runInMyDir
命令cd ~/my-dir || return
和命名的文件runall
,您将需要运行source runInMyDir
它而不仅仅是runInMyDir
调用它。
推荐阅读
- mongodb - 有没有办法在 mongodb 全文搜索中自定义词干提取过程?
- react-native - React Native 中的视频压缩
- hyperledger-composer - 使用passport-jwt验证hypperledger composer生成的rest api
- javascript - Javascript 对象数组,具有两个方法和两个调用函数
- javascript - 响应式图像地图推出重新定位
- python - 根据列表整数值返回字典键
- php - laravel 在 npm 运行 watch 命令后显示 menifest.js 的未定义索引
- ios - 快速更新已编辑文本视图的问题
- python - 如何在 Python 中制作基于字符串的多维数组
- flask - 您是否需要为 OpenID Grants 客户端生成自己的 nonce 值?