我正在我的 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)
如果有人知道我做错了什么,我将不胜感激!
我正在编写 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) 我有一个文件,其中包含一些列格式的数据,例如:
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 脚本找到最大数字?
我正在尝试让脚本在 /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) 这个命令的开关和参数是什么意思?
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部分。这是我正在运行的应用程序。
有人可以解释我为什么这样做(列出名称中包含空格的目录的内容):
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) 在 shell 脚本中,我正在寻找一种将 du(磁盘使用情况)结果传递给数字变量的方法,以便我可以将 shell 脚本的执行与特定文件夹的大小联系起来。我已经尝试过类似 size=$(du -sh /folder) 的东西,但这将一个字母数字值传递给变量“size”,加上文件夹的名称,这显然不是我想要的。
我正在使用 OSX,但我相信这更像是一个 bash/linux 问题。有没有人知道如何实现这一目标?非常感谢。
我想从 shell 脚本编辑 systemd 的单元文件。我想更改单元唯一的ExecStart行。使用systemctl edit对我来说看起来很聪明,但该命令需要一个设置为SYSTEMD_EDITOR环境变量的编辑器。有没有SYSTEMD_EDITOR其他替代方法可以使用echo 'ExecStart=foo' | SYSTEMD_EDITOR=SOMETHING systemctl edit bar?
我正在尝试运行托管在 github 上的远程 bash 脚本:
wget -O - https://raw.githubusercontent.com/xxxxx/script.sh
Run Code Online (Sandbox Code Playgroud)
一切正常,没有问题
但是当我更新上面的脚本并运行相同的命令时,它会处理旧脚本
我试过--no-cache, --delete-after, 没有成功
如何每次都获得 wget 的新副本?