Bash的错误“找不到命令”

问题描述:

语境:Bash的错误“找不到命令”

我想运行存储在bash中的变量的命令。

我的bash文件:

#!/bin/bash 
# ----------------------------------------------- 
# ---    COMMANDS     --- 
# ---    Vanilla style    --- 
# ----------------------------------------------- 
GRUNT="node_modules/grunt-cli/bin/grunt" 
LS="ls" 
# ----------------------------------------------- 
# ---    COMMANDS     --- 
# ---    Using Docker    --- 
# ----------------------------------------------- 
GRUNT="docker exec compose_custom-node_1 node_modules/grunt-cli/bin/grunt" 
LS="docker exec compose_custom-node_1 ls" 


# *********************************************** 
# ***    Execution    *** 
# *********************************************** 
# ----------------------------------------------- 
# Compile SCSS using Grunt 
# ----------------------------------------------- 
echo "Building CSS from Sass files..." 
echo "$(docker exec compose_custom-node_1 ls -l)" 
echo "$($LS -l)" 
$($GRUNT sass) 

问题:

当我运行此bash的文件时,grunt sass命令抛出一个错误:

mybash.sh: line 25: $'\E[4mRunning' : command not found

我的bash的整体回报:

[email protected]:/var/www/my_folder$ ./my_bash.sh 
Building CSS from Sass files... 
total 188 
-rw-rw-r-- 1 node node 3627 May 2 19:00 Gruntfile.js 
drwxr-xr-x 282 root root 12288 May 3 12:12 node_modules 
drwxr-xr-x 4 node node 4096 May 2 18:39 sass 
total 188 
-rw-rw-r-- 1 node node 3627 May 2 19:00 Gruntfile.js 
drwxr-xr-x 282 root root 12288 May 3 12:12 node_modules 
drwxr-xr-x 4 node node 4096 May 2 18:39 sass 
my_bash.sh: ligne 25: $'\E[4mRunning' : commande introuvable 

调查:

命令echo "$(docker exec compose_custom-node_1 ls -l)"echo "$($LS -l)"似乎工作,但不是$($GRUNT sass)

如果我在终端上运行docker exec compose_custom-node_1 node_modules/grunt-cli/bin/grunt,我看到这样的输出:

Running "sass:app1" (sass) task 
Running "sass:sticky-app2" (sass) task 
Done, without errors. 

问:

你对我有线索?我做错了什么?

+0

如果在终端中运行docker exec compose_custom-node_1 node_modules/grunt-cli/bin/grunt sass会发生什么情况?这似乎是您的问题命令正在运行 – arco444

+0

@ arco444与运行'docker exec compose_custom-node_1 node_modules/grunt-cli/bin/grunt'相同 – darckcrystale

+2

有关此类问题的常见问题,请参阅http://mywiki.wooledge。 org/BashFAQ/050 –

更好地使用功能复杂的命令存储超过一个变量,

grunt() { 
    docker exec compose_custom-node_1 node_modules/grunt-cli/bin/grunt "[email protected]" 
} 

,并把这个作为刚刚

grunt "saas" 

需要的地方在你的脚本。请参阅BashFAQ-050,其中讨论了有关复杂案例的确切要求。

+0

在我的情况下,我必须为'GRUNT'命令添加一个参数:'sass'。如何通过创建函数来实现这一点? – darckcrystale

+2

@darckcrystale:简单,只需传递参数即可 – Inian