标签: shell-script

如何在 shell 函数中创建“此处文档”?

我正在我的 Mac OSX 10.7.5 系统上学习 William Shots Jr. 的精彩《Linux 命令行》。Shots 涵盖的 90% 的 linux 与 Darwin 足够接近,我可以弄清楚或 GTEM 来弄清楚发生了什么。我已经读到了第 27 章“编写 Shell 脚本”,并且正在为在函数中创建“此处文件”而烦恼。

syntax error: unexpected end of file当我包含以下函数时出现错误:

report_uptime () {
  cat <<- _EOF_
    <H2>System Uptime</H2>
    <PRE>$(uptime)</PRE>
    _EOF_
  return
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下函数占位符,错误就会消失:

report_uptime () {
  return
}
Run Code Online (Sandbox Code Playgroud)

另外,在脚本的其他地方,在函数之外,我使用该cat << _EOF_格式毫无问题地创建“此处文件”:

cat << _EOF_
<HTML>
      <HEAD>
            <TITLE>$TITLE</TITLE>
      </HEAD>
      <BODY>
            <H1>$TITLE</H1>
            <P>$TIME_STAMP</P>
            $(report_uptime)
            $(report_disk_space)
            $(report_home_space)
      </BODY>
</HTML>
_EOF_
Run Code Online (Sandbox Code Playgroud)

如果有人知道我做错了什么,我将不胜感激!

linux shell-script macos

3
推荐指数
1
解决办法
4448
查看次数

这个命令 :(){ :|: &amp; };: 有什么作用?

这个 shell 命令在 Linux 中有什么作用

:(){ :|: & };:
Run Code Online (Sandbox Code Playgroud)

它如何用于拒绝服务攻击?

linux bash shell shell-script denial-of-service

3
推荐指数
1
解决办法
5495
查看次数

对 tcsh/csh 中不存在的文件使用“&gt;&gt;”重定向运算符

我正在编写 tcsh 脚本,我想附加到一个日志文件,但是如果在附加到它之前日志文件不存在,我会收到一个错误(在下面重现)。在 bash 中,如果文件不存在,则会创建该文件。tcsh 是否支持此功能,或者我是否必须在追加之前确保该文件存在?

有没有办法>>在 tcsh 中使用类似于 bash的运算符?

$ echo something >> file_that_does_not_exist
file_that_does_not_exist: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

bash shell shell-script tcsh

3
推荐指数
1
解决办法
3424
查看次数

使用 shell 脚本的列中的最大数字

我有一个文件,其中包含一些列格式的数据,例如:

219m
219m
3.9g
3.9g
4.0g
4.0g
4.1g
4.1g
4.2g
4.2g
4.2g
Run Code Online (Sandbox Code Playgroud)

我想比较数据并找到这些数据的最大价值。这里g代表GB,m代表MB。如何使用 Linux shell 脚本找到最大数字?

linux shell-script

3
推荐指数
1
解决办法
79
查看次数

循环脚本直到文件存在

我正在尝试让脚本在 /tmp 中找到一个名为 sleep.txt 的文件,但它一直在循环

这是我所拥有的:

#!/bin/sh

set -x
until [ $(ls -la | grep -w "sleep.txt" | wc -l) != 0 ];
do
        echo "Sleep.txt doesn't exist as of yet..."
done
        echo "Sleep.txt now exists!!!"
        sleep 2
exit
Run Code Online (Sandbox Code Playgroud)

bash shell-script

3
推荐指数
2
解决办法
5088
查看次数

这些 exec su 参数有什么作用?

这个命令的开关和参数是什么意思?

exec su -s /bin/sh -c 'exec "$0" "$@"' root -- /opt/nsq/bin/nsqd
Run Code Online (Sandbox Code Playgroud)

具体的--部分和exec "$0" "$@"应该做什么。

我知道$0为脚本设置一个循环以保持运行。

您可以忽略该/opt/nsq/bin/nsqd部分。这是我正在运行的应用程序。

linux shell shell-script upstart init

3
推荐指数
1
解决办法
2813
查看次数

Bash 引号在命令替换时未转义

有人可以解释我为什么这样做(列出名称中包含空格的目录的内容):

ret="$(ls "my dir")"
Run Code Online (Sandbox Code Playgroud)

它不应该被解释为:

ret="$(ls "
my dir
")"
Run Code Online (Sandbox Code Playgroud)

例如:

ls "my" "dir"
Run Code Online (Sandbox Code Playgroud)

ls "my dir"
Run Code Online (Sandbox Code Playgroud)

linux unix script bash shell-script

3
推荐指数
1
解决办法
2076
查看次数

将 du(磁盘使用情况)结果传递给数字变量

在 shell 脚本中,我正在寻找一种将 du(磁盘使用情况)结果传递给数字变量的方法,以便我可以将 shell 脚本的执行与特定文件夹的大小联系起来。我已经尝试过类似 size=$(du -sh /folder) 的东西,但这将一个字母数字值传递给变量“size”,加上文件夹的名称,这显然不是我想要的。

我正在使用 OSX,但我相信这更像是一个 bash/linux 问题。有没有人知道如何实现这一目标?非常感谢。

linux hard-drive environment-variables shell-script du

3
推荐指数
1
解决办法
1979
查看次数

如何以编程方式修改 systemd 单元文件?

我想从 shell 脚本编辑 systemd 的单元文件。我想更改单元唯一的ExecStart行。使用systemctl edit对我来说看起来很聪明,但该命令需要一个设置为SYSTEMD_EDITOR环境变量的编辑器。有没有SYSTEMD_EDITOR其他替代方法可以使用echo 'ExecStart=foo' | SYSTEMD_EDITOR=SOMETHING systemctl edit bar

shell shell-script systemd

3
推荐指数
1
解决办法
2637
查看次数

wget 不保留缓存

我正在尝试运行托管在 github 上的远程 bash 脚本:

wget -O - https://raw.githubusercontent.com/xxxxx/script.sh
Run Code Online (Sandbox Code Playgroud)

一切正常,没有问题

但是当我更新上面的脚本并运行相同的命令时,它会处理旧脚本

我试过--no-cache, --delete-after, 没有成功

如何每次都获得 wget 的新副本?

linux bash wget shell-script

3
推荐指数
1
解决办法
4175
查看次数