在必要的目录中运行终结器,然后运行必要的命令


9

我想在特定目录(例如)中打开Terminator /home/downloads/,然后运行命令。

我通过此“自定义命令”完成了第一部分:cd /home/downloads; bash 终结者现在从该目录中启动,但是我该如何做第二部分?

既然终止程序已在downloads目录中启动,我想运行任何我想要的命令,例如lsor rake命令,或使用一些别名作为命令。我怎样才能做到这一点?

我在终结器中按鼠标右键,然后选择“参数”,“布局”,然后在“自定义命令”部分添加文本。

终止程序启动后,必须自动执行所有这些操作。


您要运行什么命令?只是运行它。您是否希望每次打开终结器时都会自动发生这种情况?请编辑您的问题,然后i)明确说明您想做什么,并且ii)告诉我们您如何设置此“自定义命令”,这是在终止符选项中进行的吗?
terdon

是的,我希望在终止符运行后自动运行第一个命令,然后再执行第二个命令,但是现在我只知道如何运行第一个命令,它已经起作用了,但是不知道如何运行第二个命令。第一个命令是:任何目录的“ cd”,第二个命令必须是我想要的任何目录,无论是否在此目录中。我编辑我的问题。对不起,我的语言不好。
2015年

Answers:


4

cd /home/downloads; exec bash作为自定义命令运行。(exec内建函数确保bash它将成为终端仿真器的子级;没有它,它可能最终成为孙子级。)您可以terminator -e 'cd /home/downloads; exec bash'在命令行上运行。

您不能在自定义命令中使用别名,因为您的别名是由定义的~/.bashrc,但是该文件仅由交互式外壳程序加载,而不是由在终端仿真器和脚本外壳程序之间用作粘合剂的脚本外壳程序加载。如果要使用别名,则需要显式加载它们。如果将它们保存在单独的文件中,那将是类似

. ~/.bash_aliases; cd /home/downloads; exec bash

或在命令行上

terminator -x bash -c '. ~/.bash_aliases; cd /home/downloads; exec bash'

如果您的别名位于中~/.bashrc,则请使用. ~/.bashrc,但请注意,.bashrc由于Shell不是交互式的,因此其中可能会导致错误。如果发生这种情况,最简单的解决方案是将您的别名(以及您要在粘合代码中使用的函数和任何其他设置)拆分为一个单独的文件,并使用.包含这些别名.bashrc


3

使用Terminator激活虚拟环境时,我遇到了同样的问题。

关键是要尽一切只有“一个”命令:bash。趁着它的-i选项(交互),并使用自定义--rcfilePROMPT_COMMAND设置为任何我们想要执行。结果将是这样的:

command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="your commands; go here; unset PROMPT_COMMAND"') -i"

只需your commands; go here;用您的实际命令替换即可。请参阅此答案以获取解释


知道为什么我指定的命令无法使用ctrl + c退出吗?
Flowkap

2

只需按照添加第一个命令的相同方式添加另一个命令。例如,运行ls

cd /home/downloads; ls; bash

您可以将其添加到个人资料的“命令”选项中:

在此处输入图片说明

您没有得到的原因rake是它不在默认路径中。要使用它,您需要指定路径。因此,首先在终端中运行以下命令:

type rake

那会返回类似的东西/foo/bin/rake是您需要的道路。将其添加到上面的“自定义”命令中:

cd /home/downloads; /foo/bin/rake; bash

这不适用于别名。别名由您的外壳设置,在此处不可用。一种解决方法是改用脚本。因此,如果您具有这样的别名:

alias foo="command1 argument2"

创建一个脚本,调用它foo.sh并将其保存在中/home/youruser/bin,其中包含以下内容:

#!/usr/bin/env bash
command1 argument2

并使其可执行:

chmod a+x /home/username/bin/foo.sh

然后,在“自定义命令”部分中,使用:

cd /home/downloads; /home/username/bin/foo.sh; bash

是的,我知道这和“ ls”命令有效,但是1.例如“ rake”命令不起作用,并且终端显示错误:“ / bin / bash:rake:找不到命令” 2.我有一些别名,对于示例“ cd / home / downloads;'aliasname'; bash”也不起作用,终端显示相同的错误
Asq

@Asq好,是的,这就是为什么我要您告诉我们您要运行什么命令的原因。请编辑您的问题并提供具体示例。别名将不起作用,您可以忘记这一点,但是rake如果使用完整路径,则应该这样做/path/to/rake
terdon

我必须编辑我的主要问题吗?您的意思是“如果使用完整路径/ path / to / rake”?我cd到我一直使用rake的目录,它可以正常工作,但是“ cd / path / to / rake; rake; bash”不起作用
Asq

@Asq是的,请编辑您的原始问题。不要cd /path/to/rake; rake; bash/path/to/rake; rake; bash
terdon

:(我在/ home / 123目录中时使用rake命令。我现在在自定义命令中添加以下内容:“ / home / 123; rake; bash”,但控制台向我显示2个错误:1. / bin / bash:/ home / 123:这是目录
2。/bin/bash:rake

1

如果右键单击打开的终结器窗口,则可以选择“首选项”。选择“配置文件”,然后从此处选择“命令”选项卡。有一个标题为“运行自定义命令而不是我的shell”的复选框。

我相信这就是您想要的。


1

只是不要使用“ command =”来更改目录。将其用于您的实际命令!

编辑时.config/terminator/config,只需指定

  • directory = <dir>”当你想要终端自动cd到一个给定的目录,或
  • command = <cmd>; <your_shell>”当你想要一个自定义命令来执行,而不是简单地更改目录

例如:

  • 如果只希望终端<dir>在启动时进入cd ,则指定“目录”并将“命令”留空:

    [[terminal7]]]
    directory = /home/dan/src/wmc
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • 如果只想执行自定义命令,则仅指定命令:

    [[terminal7]]]
    command = /home/dan/mine/my-custom-command
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
  • 如果您希望两者都进入DIR并执行命令:

    [[terminal7]]]
    directory = /home/dan/dl-dir
    command = /home/dan/mine/my-custom-command-to-run-in-dlDIR
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.