假设我有一组要在ubuntu终端中执行的命令: 例如:
sudo apt-get update
sudo install xrdp
sudo install java
.....
和其他许多人。
在ubuntu中是否可以执行包含这些命令的文件并在没有人为干预的情况下执行(如是/否),默认是吗?
我尝试安装wine,执行$ wine cmd / c Commands.bat,将所有这些命令放在.bat文件中但得到错误"应用程序试图创建一个窗口,但是没有可以加载驱动程序。&# 34; 那么,有没有简单的方法在ubuntu中执行一系列命令?
答案 0 :(得分:9)
你在说什么 - 一个文件中的多个命令 - 被称为“shellscript”。
假设你有commands.sh
:
sudo apt-get update
sudo install xrdp
sudo install java
然后你可以使用:
执行命令bash commands.sh
您还可以使用所谓的shebang
机制从中创建直接可执行的shellcript。
将此行放在commands.sh
#!/bin/bash
..并使文件可执行:
chmod +x commands.sh
现在你可以直接执行它:
./commands.sh
如果您想对所有问题说“是”,可以使用yes
命令:
yes | bash "file_with_commands.sh"
答案 1 :(得分:6)
无需像在尝试使cmd.exe工作时那样做一些被卷入和疯狂的事情。你已经在你的系统上有一个完美的工作shell。您还需要了解像sudo
这样的程序。
sudo
并不是一些可以实现某些功能的神奇颂歌。 sudo
是一个帮助程序,允许启动具有提升权限的程序。您可以只使sudo启动一个shell并将包含所有这些命令的脚本传递给shell。
车削
sudo this
向
sudo that
然而,这看起来并不正确。我想你原本打算写
sudo apt-get update
sudo install xrdp
sudo install java
您可以将此缩短为
sudo sh -c 'apt-get update ; install xrdp ; install java'
或在合并的单衬里壳
sudo apt-get update
sudo apt-get install xrdp
sudo apt-get install java
现在关于是/否问题。如果您想要无人值守运行的程序没有提供提供默认答案的选项,您可以使用sudo apt-get update
sudo apt-get install xrdp java
程序。即使它被命名为sudo sh -c 'apt-get update ; apt-get install xrdp java'
,它也可以回答NO或任何你喜欢的东西:
yes
这是如何工作的?有一个名为"标准输入/输出"程序从哪个程序读取输入和写入输出。 Shell允许您将一个程序的输出重定向到另一个程序的输入。这称为管道。特殊字符yes
指定shell中的管道。
所以说你有一个想要看到大量narfi /home/dw
1007 ~ % yes Hello
Hello
Hello
Hello
Hello
Hello
…
输入的程序,你可以对shell进行以下调用
|
所以你可以将它与apt-get结合起来,给出所有默认的答案写作
Aye
然而,这是在错误的树上咆哮。看看apt-get的调用选项:
yes Aye | happypirate
apt-get为您提供了一个选项,可以自动回答所有问题的所有问题。干净吧?请注意,其他程序可能使用不同的选项键,因此建议您始终阅读其精细手册(RTFM)。
答案 2 :(得分:2)
在最基本的层面上,您想要执行一个脚本。您可以通过创建如下文件来实现:
#!/bin/bash
sudo apt-get update
sudo install xrdp
sudo install java
将其另存为名为go
的文件,然后在终端中,您需要将其设为可执行文件:
chmod +x go
然后你可以输入:
来运行它./go
如果您的程序希望第一个问题的答案为“是”,那么下一个问题的答案为“否”,您可以提前准备答案并将其发送到程序中:
( echo yes; echo no ) | sudo apt-get update