我的脚本调用一个外部命令(例如,readlink),它将:
在成功时将有用的字符串写入它的stdout,即…
在失败时返回非零退出状态
我知道如何单独处理,例如捕获我可以使用的标准输出
MY_VAR=$(readlink /)
或者检查我可以使用的结果:
if readlink /tmp; then
echo "Success"
fi
但是,是否有一种干净/清晰的方法同时做到这两种方式呢?我不确定以下几点是否有效:
if MY_VAL=`readlink "$MY_ARG"`; then
echo "Value is ${M
我是一个unix脚本的新手,我想做下面的事情,我几乎不知道如何继续。
我希望将终端上给定的某些命令集的输入和输出记录到一个跟踪文件中。我应该能够打开和关闭它。
例如。
switch trace on
user:echo Hello World
user:Hello World
switch trace off
那么跟踪日志文件,例如trace.log,它的内容应该是
echo Hello World
Hello World
我认为可以做的一件事是使用set -x,将其输出重定向到某个文件,但找不到这样做的方法。我做了man set或man -x,但我找不到任何入口。也许我太天真了,但一
具有以下bash脚本:
#!/bin/bash
set -e
function foo() {
# commands that might fails and I want to exit my script
...
echo "result I need as output"
}
my_var=$(foo)
echo "I don't want this if there is an error inside foo"
使用set -e (在bash 4.4.19中)似乎不适用于子still,即仍然在执行最后一个echo命令)。如果
我编写了一个Bash脚本,它没有执行抛出"num:命令未找到“
#!/bin/bash
echo "We will print Hello World a number of times."
num=0
while [ $num -lt 10 ]
do
echo "Hello World!"
num = $((num + 1))
done
谢谢
假设我想让命令type idonotexist闭嘴。通常,它会输出如下消息:
bash: type: idonotexist: not found
如何使这样的命令以可移植的方式保持静默(例如,以一种适合于像Bash和zsh这样的普通shell的方式)。
关于如何使用它的示例,请考虑脚本中使用的命令,该脚本应该只显示echo显示:
if type "idonotexist"; then
echo "hello world"
else
echo "install idonotexist"
fi
假设我有个bash函数
ql_do_x(){
local foo="bar";
if true; then
foo="zam";
fi
}
如果我跑:
foo="unmodified"
ql_do_x
echo "$foo"
...is它保证了foo的外部值将是“未修改的”,即使local关键字仅用于函数中的第一个赋值,而不是第二个?
这两个命令具有相同的结果是有意义的:
$ if 1; then printf "success\n"; else printf "failure\n"; fi
-bash: 1: command not found
failure
$ if $(printf 1); then printf "success\n"; else printf "failure\n"; fi
-bash: 1: command not found
failure
因为$(printf "1")正在打印1,然后在if中执行1。
然而,考