我有一些shell代码需要调试,因此我将代码转储了其环境到文件中
env > env.txt
Run Code Online (Sandbox Code Playgroud)
并使用我的测试脚本来获取它的源代码test.sh:
. ./env.txt
echo $EXAMPLE
echo $EXAMPLE2
Run Code Online (Sandbox Code Playgroud)
env.txt的内容是:
EXAMPLE=sh /hello/command.sh
EXAMPLE2=/just/some/path
Run Code Online (Sandbox Code Playgroud)
但是,env不会在其值两边加上引号,这往往会导致$ EXAMPLE出现问题,我收到此错误
test.sh:/hello/command.sh:未找到
很明显,它试图运行它而不是设置变量。
您发现此问题最快的解决方法是什么?
我有一个命令,我用来获取hostname.localdomain
dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'
Run Code Online (Sandbox Code Playgroud)
这很好地返回一个结果,如:
michael.lawler.localdomain.com
我想进一步将该结果用作bash脚本中的变量.
我似乎无法越过第一个管道.
如果我 VAR="dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'"
...我回到整个区域转移.我也尝试$过在dig命令之前添加许多小改动,没有引号,似乎没有任何效果.任何方向都非常感谢.
我有一个脚本写出临时文件,以帮助执行.在我的脚本结束时,我只是打电话rm filename来清理我创建的临时文件.问题是脚本因错误而中断或被中断时.在这些情况下,rm永远不会达到语句,因此永远不会清除文件.有没有办法我可以指定一些命令在退出时运行,无论它是否成功退出?
在Bash(v4 +)中:
$ declare -A x=([foo]=bar [coconut]=banana)
$ echo ${x[@]}
Run Code Online (Sandbox Code Playgroud)
得到:
banana bar
Run Code Online (Sandbox Code Playgroud)
我可以输入什么来获取此信息:
foo coconut
Run Code Online (Sandbox Code Playgroud) 我一直在尝试实现博客文章" 重新访问所有bash历史记录 "中描述的功能.基本上,脚本允许您执行的操作是永久保留所有bash历史记录并保持多个会话.
有人在Github上很容易地访问所有代码.
但是每当我使用带空格的目录时:
cd ~/Desktop/
mkdir "dir with spaces"
cd dir\ with\ spaces/
Run Code Online (Sandbox Code Playgroud)
我下次登录时会收到如下错误:
-bash: pushd: /Users/jack/Desktop/dir: No such file or directory
-bash: pushd: with: No such file or directory
-bash: pushd: spaces: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我理解的唯一参考似乎没有导致问题:
# Now change to the new dir and add to the top of the stack
pushd "${the_new_dir}" > /dev/null
Run Code Online (Sandbox Code Playgroud)
我希望一些bash脚本专家可以指出代码中的错误,以便我可以修补它.
我为自己编写了一个非常简单的命令行实用程序.设置包括:
alias cmd='. shellscript'因此它在相同的终端上下文中运行.)因此我可以有效地输入cmd它来运行它,一切都很好.
我的问题是,如何将此分发给其他人?显然我可以用我的代码写出这些指令并完成它,但有更快的方法吗?我偶尔会看到你粘贴到控制台中的那些单行程序来安装一些东西.我该怎么办?我似乎记得他们涉及curl和管道,sh但我不记得了.
我有四个PHP脚本,执行需要按顺序执行的各种任务.
而不是为每个PHP脚本创建一个cron条目,我认为我会聪明并将其包装为Bash脚本,如下所示:
#!/bin/bash
# set notification email.
NOTIFYEMAIL="webmaster@example.com"
# set PHP path.
PHP="$(which php)"
# set folder path.
FOLDER="/var/www/example.com/processors/"
# list of scripts.
SCRIPTS=("script_1" "script_2" "script_3" "script_4")
# execute each script.
for i in "${SCRIPTS[@]}"
do
SCRIPT="$FOLDER/$i.php"
printf "Processing: %s\n" $i
chmod +x $SCRIPT
$PHP $SCRIPT
done
echo "Scripts have been processed." | mail -s "Scripts Processed" $NOTIFYEMAIL
Run Code Online (Sandbox Code Playgroud)
我已经单独测试了所有脚本,并且它们正常工作,将处理信息输出到终端.
/usr/bin/php /var/www/example.com/processors/script_1.php
Run Code Online (Sandbox Code Playgroud)
我甚至测试了bash脚本,该脚本按顺序调用四个PHP脚本,通过终端手动调用,也可以正常工作.
/bin/bash /var/www/example.com/processors/run.sh
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,当我离开cron在root用户crontab 上使用以下命令运行它们时,PHP脚本不会执行.
# process daily.
0 1 * * * /bin/bash /var/www/example.com/processors/run.sh > /dev/null …Run Code Online (Sandbox Code Playgroud) 我有一个包含文本和数字的文本文件,我想使用grep只提取我需要的数字,例如,给定一个文件如下:
miss rate 0.21
ipc 222
stalls n shdmem 112
Run Code Online (Sandbox Code Playgroud)
所以说,我只是想提取的数据miss rate是0.21.我如何用grep或sed做到这一点?另外,我需要不止一个号码,而不仅仅是后一个号码miss rate.也就是说,我可能要同时获得0.21和112.示例输出可能如下所示:
0.21 222 112
Run Code Online (Sandbox Code Playgroud)
因为我需要以后绘图的数据.
如何将nc的结果保存到变量中?
我想要:
nc:连接到localhost端口1(tcp)失败:连接被拒绝
在我的变量上.我试过了:
a="$(nc -z -v localhost 1)"
echo $a
Run Code Online (Sandbox Code Playgroud)
但输出是空的.
假设我有text.txt以下文件:
she likes cats, and he likes cats too.
我希望我的结果看起来像:
she 1
likes 2
cats 2
and 1
he 1
too 1
Run Code Online (Sandbox Code Playgroud)
如果space , .加入它会使脚本更容易,那就没问题了.
是否有一个简单的shell管道可以实现这一目标?