我正在尝试创建一个 bash 文件,该文件调用一个程序,该程序需要在两个双引号之间提交一个参数。
看看我的文件内容。
#!/bin/bash
echo ./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &
./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &
echo 部分准确地打印了我需要的命令,但是当我执行它(下一行)时,我把它弄乱了。
我怎样才能解决这个问题?
谢谢!
这就是我需要如何称呼它:
./yowsup/yowsup-cli demos --s 9999999999 "my parameter" -c yowsup/config
回显结果:
./yowsup/yowsup-cli demos --s 9999999999 "my parameter" -c yowsup/config
调用结果:
demos: error: unrecognized arguments: parameter
复制并粘贴回显结果:
INFO:yowsup.demos.sendclient.layer:Message sent
答案1
您需要转义命令中的引号echo
才能在输出中看到它们,但不应在实际命令中转义它们:
#!/bin/bash
echo ./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &
./yowsup/yowsup-cli demos --s $1 "$2" -c yowsup/config &
实际命令中使用引号是为了防止拆分$2
包含多个单词的 - 。
答案2
我(几乎)总是引用所有内容来“echo”,所以我会像上面那样做:
#!/bin/bash
echo "./yowsup/yowsup-cli demos --s $1 \"$2\" -c yowsup/config &"
./yowsup/yowsup-cli demos --s $1 "$2" -c yowsup/config &
与 @muru 解决方案的区别在于,原始 echo 命令在“后台”运行 - 这里它回显到前台屏幕,但作为后台命令运行。 (@muru 也不在命令末尾显示 & 符号。)