我已经阅读了这个问题和答案,但它并不适合我的问题,即使它很相似。
我正在编写一个脚本(称为 cpj),它将启动我当前的项目之一。我有大约 5 个。当我打字
$ cpj blah
我希望当前工作目录更改为 blah 项目目录(我保存在 $PROJDIR 中),并且我希望 emacsclient 打开该项目的主文件(我保存在 $MAINFILE 中)。
我引用的问题说你不能直接改变运行脚本的 shell 的环境,但你可以获取一个脚本,它会这样做。
为了测试这一点,我编写了一个 shell 脚本(称为 chcwd),其中有一行:
cd $1
如果,从命令行我做:
$ . chcwd $PROJDIR
我当前的工作目录将根据需要更改。另一方面,如果从我的 cpj 脚本中,我有相同的行:
. chcwd $PROJECT
它不会改变 shell 的当前工作目录。我意识到我正在运行 2 个脚本(cpj,然后是 chcwd),因此创建了 2 个 shell,但我看不出有什么办法可以完成我想要的。谁能告诉我如何实现我的目标?
Cal*_*leb 11
你不能让你的蛋糕也吃它。这里发生的两件事是在新 shell 中执行脚本和导入要在当前 shell 中运行的脚本行。通过使用点运算符(它是source命令的别名),您实际上是在当前 shell 中运行代码。如果您的代码选择cd,完成后您将留在新目录中。
另一方面,如果您想执行一个程序(或脚本,没关系),该程序将作为子进程启动。在 shell 脚本的情况下,将打开一个新的 shell 并在其中运行代码。cd采取的任何操作都将更改该 shell 的当前工作目录,对要遵循的任何命令有效。作业完成后,shell 将退出,让您返回原始(且未修改)的 shell。
如果您经常使用它,并且希望将其效果保留在当前的 shell 中,也许您可以将“脚本”编写为 shell 函数,并将其保存在您的 ~/.profile 或其他 shell rc 文件中。
function cpj() {
# code here
cd /path/$1
emacs file_name
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20082 次 |
| 最近记录: |