shell 如何分解下面的命令,使其可以在bash脚本中使用?

beq87vna  于 2023-01-05  发布在  Shell
关注(0)|答案(1)|浏览(135)

我正在尝试为一个自定义的rofi菜单写一个bash脚本。这个菜单对于不同的自定义命令会有不同的选择。目前,我正在尝试看看我是否可以写一个bash脚本来执行一个命令。这个命令是:

exec /home/user/.config/i3/myscript.sh 'todolist' 'xfce4-terminal --command "emacs -nw -Q -l ~/.emacs.d/script.el ~/Dropbox/mytodo.org" '

这是一个非常长的命令,因此我将其分解如下:

COMMAND=("/home/user/.config/i3/myscript.sh")                                                                                                                         
EMACS=(" 'todolist' 'xfce4-terminal --command "emacs -nw -Q -l ~/.emacs.d/script.el ~/Dropbox/mytodo.org"' ")

我试着附和道:echo $COMMAND $EMACS我得到的结果是:

/home/user/.config/i3/script.sh 'todolist' 'xfce4-terminal --command emacs

因此,从-nw -Q -l开始的所有命令都被忽略了。因此,这是一个不完整的命令。有人能帮我修正第二个变量EMACS吗?

4xrmg8kj

4xrmg8kj1#

Bash中变量赋值中的括号用于创建数组。数组项之间用空格分隔。下面是一个示例:

arr=(0 1 2)
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}

所以在你的例子中:

EMACS=(" 'todolist' 'xfce4-terminal --command "emacs -nw -Q -l ~/.emacs.d/script.el ~/Dropbox/mytodo.org"' ")

表达式${EMACS[0]}将包含'todolist' 'xfce4-terminal --command emacs,表达式${EMACS[1]}将具有值-nw,依此类推。
另外,请注意" 'todolist' etc. "emacs只是字符串" 'todolist' etc. "emacs的并置,因此结果将是不带引号的所有字符的连接。
我的建议是你使用变量来表示文件,其余的用普通的bash来表示。如果你觉得一行太长,可以用反斜杠把命令分成多行:

MY_SCRIPT="${HOME}/.config/i3/myscript.sh"
EMACS_SCRIPT="${HOME}/.emacs.d/script.el"
DROPBOX_FILE="${HOME}/mytodo.org"
exec "$MY_SCRIPT" todolist xfce4-terminal \
    --command "emacs -nw -Q -l ${EMACS_SCRIPT} ${DROPBOX_FILE}"

相关问题