如何在后台运行进程并在同一命令行中更改目录

时间:2017-09-19 06:49:56

标签: bash

我想创建一个命令,它将更改目录,在后台运行一个进程,然后返回到原始目录。从特定目录启动进程非常重要(它使用相对路径的运行目录)。

我尝试过运行此操作,但出现以下错误:

Base64.encodeToString(getBytesFromBitmap(bitmap),Base64.NO_WRAP);

我可以运行以下任一命令。

    this.model.UserProfileImageBase64 = Base64.encode(binaryString);

这样做的目的是能够将此命令添加到我的别名中。

2 个答案:

答案 0 :(得分:1)

引自此GNU bash页面,

  

list是一个或多个管道的序列,由一个运算符;&&&||分隔,并且可选由;&或换行符之一终止。

     

在这些列表运算符中,&&||具有相同的优先级,其次是;&,它们具有相同的优先级。如果命令由控制操作符&终止,则shell在子shell中异步执行命令。这称为在background

中执行命令

您可以从上面推断出&本身就是一个命令分隔符,就像;一样。你只需要做

cd ~/work; myapp &> /dev/null & cd -
#                            ^^^ just acting as a command-separator

(或)使用{}将您的命令分组到复合语句中,如下所示

cd ~/work; { myapp &> /dev/null & }; cd -

答案 1 :(得分:1)

在同一个子shell中运行cd命令和myapp,您不需要cd返回:

( cd ~/work; myapp &>/dev/null ) &

圆括号(...)创建一个子shell。您可以自由更改目录(cd)或更改子shell中的环境,它将不会影响父shell。因此,之后不需要cd

实施例

让我们从目录/tmp/1

开始
$ pwd
/tmp/1

现在,让我们在后台shell中运行cd和示例命令,然后再次检查目录:

$ ( cd work; date &>/dev/null ) &
[1] 11942
$ pwd
/tmp/1