我正在尝试编写一个简单的脚本来启动终端并运行命令workon foo
。换句话说,我只想这样做:
mate-terminal -e workon foo
但是,这不起作用,因为workon
命令要求我首先执行以下操作:
export WORKON_HOME=~/work;
source /usr/local/bin/virtualenvwrapper.sh
通常这些行会自动运行,因为它们在我的 中.bashrc
,但显然mate-terminal -e
没有执行source ~/.bashrc
。但是,如果我尝试将这些行添加到我的脚本中:
mate-terminal -e export WORKON_HOME=~/work; source /usr/local/bin/virtualenvwrapper.sh; workon foo
它也不起作用。MATE 告诉我:
There was an error creating the child process for this terminal
Failed to execute child process "export" (No such file or directory)
如果我跳过export
并直接执行mate-terminal -e source ...
或者尝试使用().
而不是source
(mate-terminal -e . ...
),也会遇到同样的问题。
export
如果我不能、、source
或,我不确定我该如何加载任何东西,.
但一定有某种方法,因为mate-terminal -e
没有它几乎毫无用处。
有人知道我如何在终端中设置我的环境吗mate-terminal -e
?
答案1
我没有安装的版本mate-terminal
,但如果它的工作原理与gnome-terminal
您类似,您可以尝试以下方法之一:
直接写类似 或
mate-terminal -e bash -c 'WORKON_HOME=$HOME/work; source /usr/local/bin/virtualenvwrapper.sh; workon foo'
mate-terminal -e "bash -c 'WORKON_HOME=$HOME/work; source /usr/local/bin/virtualenvwrapper.sh; workon foo; read line'"
(老实说
gnome-terminal
你应该使用-x
而不是-e
)。创建可执行脚本(名为
WorkOnScript.sh
,使用chmod u+x WorkOnScript.sh
)#!/bin/bash WORKON_HOME=$HOME/work; source /usr/local/bin/virtualenvwrapper.sh cd $HOME/work # If needed workon foo sleep 10s # to add a pause before script and terminal end read line # to wait you press return to close the terminal
并尝试执行它
mate-terminal -e /path/to/WorkOnScript.sh
或者
mate-terminal -e "/bin/bash -c \"/path/to/WorkOnScript.sh\""
笔记
可以保持终端打开,将其作为传递给的字符串中的最后一条命令bash -c
或脚本的最后一行添加:
- 几秒钟(或几小时......)添加
sleep 10s
(或睡眠 10 小时)。 - 直到按下return添加
read line
- 直到按下或添加(它执行一个 shell)。ctrl+dexit
/bin/bash
通过一些终端参数说明执行命令后可以保持打开状态。使用 mate-terminal,您可以尝试查看其中有趣的内容mate-terminal --help-all
。之后,您已创建个人资料和“保留终端”勾选后,你可以使用选项--window-with-profile=PROFILENAME
或--tab-with-profile=PROFILENAME
参考
答案2
你如何在脚本中运行它?
因此创建你的脚本:
touch ~/myscript.sh
chmod 700 ~/myscript.sh
vi ~/myscript.sh
然后根据你的需要编辑它。在 vi 中使用我插入并小心使用退格键,使用ESC键然后X删除。然后执行ESC键进而!qw保存并退出:
#!/bin/bash
export WORKON_HOME=~/work;
source /usr/local/bin/virtualenvwrapper.sh
mate-terminal -e workon foo
然后尝试运行它:
./myscript.sh