Linux - Bash - 将多行字符串从源复制到终端

Linux - Bash - 将多行字符串从源复制到终端

我在准备系统时会记笔记,这样当我需要准备另一个系统时,我就可以参考一些内容。我还希望在某个时候使用这些笔记并将其应用到 puppet 配置中。

我正在尝试编写多行 bash 命令,但是当我从我的 IDE(aptana)复制并粘贴到终端时,我得到了奇怪的行为并且命令从未执行,即使当我回顾历史记录时多行命令看起来像是我手动输入的。

我的问题是,如何以多行格式保存命令,以便我可以快速复制并粘贴到终端?

例子:

$ "mkdir -p /var/log/php && \
 chown -R apache /var/log/php && \ 
 chgrp -R webdev /var/log/php && \
 chmod -R 775 /var/log/php && \ 
 touch /var/log/php/oops.log"

touch /var/log/php/oops.log: No such file or directory

答案1

Bash 控制运算符(例如&&)不需要“ \”来将行连接在一起。您也不需要引用您的脚本。重构版本将是:

mkdir -p /var/log/php && 
/bin/chown -R apache /var/log/php &&  
/bin/chgrp -R webdev /var/log/php && 
/bin/chmod -R 775 /var/log/php &&  
touch /var/log/php/oops.log

在 shell 中剪切并粘贴该脚本应该可以工作。

答案2

您可以使用exec

$ exec <<< "echo hello world"

请记住,完成后它将退出您当前的 shell。您可以通过生成一个新 shell 来解决这个问题:

$ bash -s <<< "echo hello world"

另外,你可以将其制作成 bash 脚本。例如:

#!/bin/bash
mkdir -p /var/log/php
chown -R apache /var/log/php
chgrp -R webdev /var/log/php
chmod -R 775 /var/log/php
touch /var/log/php/oops.log

你可以做类似的事情:

$ cat >> ~/script.sh
#!/bin/bash
mkdir -p /var/log/php
chown -R apache /var/log/php
chgrp -R webdev /var/log/php
chmod -R 775 /var/log/php
touch /var/log/php/oops.log
<CTRL+D>
$ . ~/script.sh

答案3

您只需执行前四个命令即可...

$ install -o apache -g webdev -m 0755 -d /var/log/php

这将创建一个/var/log/php具有所有者apachewebdev和权限的目录0755

相关内容