簡體   English   中英

Mac OS 上的 Bash shell 腳本 - 某些命令只回顯到 shell,不執行

[英]Bash shell script on Mac OS - Certain commands only echoed to shell, not executed

我正在嘗試通過終端應用程序使用 OS X 10.12 附帶的內置版本的 Bash (3.2) 使 shell (bash) 腳本在 Mac OS X 10.12.5 機器上運行。

我猜這里存在語法問題,但到目前為止我一直無法按預期執行其中一個命令。 每次調用該命令時,它只是向 shell 回顯該命令,但不執行它。

腳本中存在的另一個命令執行沒有問題,所以我猜這個問題與那里使用的單引號/雙引號/括號有關。

該腳本來自我一直在學習 Bash 腳本的教程,所以我相信這在 Linux Bash shell 上可以正常工作,但我不想通過 Linux 使用它。

劇本是這樣的。。

#!/bin/bash

dbname="testdb"
table_layout="(id int not null auto_increment, primary key(id), name varchar(255), description text)"
action=$1
list_name=$2
name=$3
id=$3
desc=$4

if [[ $# -lt 1 ]]
then
  echo "******************************"
  echo "Task Application from tutorial"
  echo "******************************"
  echo ""
  echo "Usage:"
  echo "task (new-list)|del-list|add|del|ls)"
  echo "new-list: Create a new list"
  echo "del-list: Delete a list and all tasks inside the list"
  echo "add: task add list_name task_name task_description - creates a new task"
  echo "del: task del list_name task_id deletes a working task"
  echo "ls: task ls - lists tasks, task ls list_name, lists tasks in a list"
  echo ""
  echo ""
fi

function create_list {
    echo create table $list_name$table_layout | mysql $dbname
}

function add_task {
    echo 'insert into "${list_name}" (name, description) values ("${name}","${desc}") | mysql $dbname'
}

但是我遇到問題的命令是這個..(添加任務命令)

echo 'insert into "${list_name}" (name, description) values ("${name}","${desc}") | mysql $dbname'

我也嘗試使用上面的行,如下所示:

echo `insert into "${list_name}" (name, description) values ("${name}","${desc}") | mysql $dbname`

和...

echo `insert into `${list_name}` (name, description) values ("`${name}`","`${desc}`") | mysql $dbname`

也...

echo 'insert into '${list_name}' (name, description) values ("'${name}'","'${desc}'") | mysql $dbname'

(...最后一個匹配原始教程中包含的內容)

我還通過 Homebrew 安裝了 Bash 4.4,但結果是一樣的。

任何建議將不勝感激!

你是對的:它是引用。 在只是打印的命令中,所有內容 - 包括| mysqli | mysqli - 在單引號'' 因此, bash 將所有這些視為強項並將其傳遞給echo ,后者盡職盡責地打印它。

教程編輯中的行要么有這個問題,要么在某處找到它。 (值得注意的是,它不會轉義 SQL 字符,因此如果被除您以外的任何人使用,則存在安全風險。)一個小小的改進是雙引號變量擴展以及移動尾隨引號:

echo 'insert into '"${list_name}"' (name, description) values ("'"${name}"'","'"${desc}"'")' | mysql "$dbname"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM