我有一个命令列表,我想将其粘贴到终端中,以便它们一个接一个地运行。
最初它们运行良好,但后来命令被截断。
命令示例:
ogr2ogr -nlt PROMOTE_TO_MULTI -progress -skipfailures -overwrite -lco PRECISION=no -f PostgreSQL PG:"dbname='natural_earth' host='localhost' port='5432' user='natural_earth' password='natural_earth'" 50m_physical/ne_50m_lakes.shp
这些命令大约有 150 个,它们存储在 gedit 中并关闭换行,并作为块直接粘贴到终端中。
预期结果:
$ ogr2ogr -nlt PROMOTE_TO_MULTI -progress -skipfailures -overwrite -lco PRECISION=no -f PostgreSQL PG:"dbname='natural_earth' host='localhost' port='5432' user='natural_earth' password='natural_earth'" 50m_physical/ne_50m_lakes.shp
0...10...20...30...40...50...60...70...80...90...100 - done.
这适用于大约前 30 个命令,之后我会得到不同级别的命令截断,例如:
$ ogr2o
ogr2o: command not found
$ ogr
ogr: command not found
$ ogr2ogr -nlt PROMOTE_TO_MULTI -progress -skipfailures -overwrite -lco PRECISION=no -f PostgreSQL PG:"dbname='natural_earth' host='localhost' port='5432' user='natural_earth' password='natural_earth'" 50m_physical/ne_50m_graticules_all/ne_50m_grati
FAILURE:
Unable to open datasource `50m_physical/ne_50m_graticules_all/ne_50m_grati'
所以我是 Linux 新手。我想知道是否有比从 gedit 复制和粘贴更好的方法来运行它们?
我正在运行 Linux Mint 15“olivia”Cinnamon 32 位。
答案1
只需将要运行的命令放在一个特殊文件中,并将其作为 shell 脚本执行即可。通过使用参数调用 shell:
sh your_commands
或者在命令前面加上哈希邦并将文件标记为可执行文件chmod a+x your_commands
:
#!/bin/sh
your commands
go
here
这将使其表现为常规二进制文件,您将能够执行
/path/to/your_commands
或者,您也可以使用source
shell 的功能,该功能从当前 shell 内的文件执行命令(而不是生成一个新的 shell,这就是上面两个 shell 所做的事情):
source your_commands
或者
. your_commands
(两者含义相同)。
答案2
欢迎来到 Stack Exchange,也欢迎来到 Linux Mint!
您询问是否有比粘贴到终端更好的方法来运行一长串命令。碰巧的是:将命令保存到文件中,并将其作为 shell 脚本运行。
例如,如果您将命令保存在~/scripts/myscript.sh
(~
是主目录的缩写)中,则可以通过输入以下命令来运行它:
# change directory to where the script is
cd ~/scripts
# run the script with bash (most scripts are bash scripts)
bash myscript.sh
注意你的工作目录
需要注意的一件事是:您运行的目录bash myscript.sh
将用作工作目录。如果您的脚本谈论50m_physical/lakes.sh
您目录中的file ~/mylakesproject
,那么这将起作用:
cd mylakesproject
bash ~/scripts/myscript.sh
# ~/mylakesproject/50m_physical/lakes.sh exists
这是行不通的:
cd myotherproject
bash ~/scripts/myscript.sh
# ~/myotherproject/50m_physical/lakes.sh does not exist
这也不会:
cd scripts
bash myscript.sh
# ~/scripts/50m_physical/lakes.sh does not exist
祝好运并玩得开心点!