[英]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.