我正在用Unix脚本实现一个场景。我有两个脚本ABC.bash和XYZ.bash。在ABC.bash中有一个条件,即请求者不输入Y或y脚本,带消息退出,并且不能进一步工作。ABC.bash在运行alone.Problem时运行良好,当我从另一个bash脚本(即XYZ.bash )运行它时就会产生它。它不检查是否有退出条件。XYZ.bash中的逻辑语法
echo "Calling ABC.bash from XYZ.bash"
ABC.bash $a $b | tee -a $LOGFILE; sleep 2
if [ ${PIPESTATUS[0]} = 0 ]
then
ec
我编写了一个管道命令,并尝试在timeout下运行它。如果最后一个管道命令成功,但第一个命令失败,则状态为0(因为最后一个命令成功)。我读了一篇关于使用PIPESTATUS:Pipe output and capture exit status in Bash获取状态的文章(它也建议使用set -o pipefail,但也不起作用)。然而,当我试图在超时PIPESTATUS[0]不正确的情况下运行它时,这可能是因为当我在timeout下运行它时,我需要使用bash -c运行管道命令(下一篇文章将解释为什么应该使用timeout <time> bash -c <command
我的安装文件中有一个很小的shell函数,它调用参数中提供的命令行,并在失败时调用标准退出。
function my_exec() {
if [ "$1" != "" ]; then
$* # WANT FILTER HERE
my_test $? $*
fi
}
function my_test() {
if [ $1 -ne 0 ]; then
ecval=$1
shift
if [ "$1" !- "" ]; then
我正在将perl备份脚本从CentOS 6改编到Ubuntu20.04。 子例程rsync ()为系统调用ExecCmd()启动子进程。 在CentOS 6上,它使用rsync输出填充变量$ExecCmdOut,并返回退出状态$pipestatus。 在Ubuntu上,$pipestatus包含rsync输出的最后一行。在日志中我看到 Error (573): rsync failed with status total size is 2,728,691,525 speedup is 509.15. 下面是函数。你明白为什么吗? sub ExecCmd( \@$ ) {
(my
是否可以运行一个命令来重定向文件中的输出和标准错误,并知道该命令的返回码?
./COMMANDE.sh 2>&1 | tee -a $LOG_DIRECTORY/$LOG_FILE
if [ $? = 0 ]; then
echo "OK"
else
echo "KO"
exit 1
fi
目前,我得到了tee命令的返回码,我想恢复COMMANDE.sh的返回码。
为了将stdout和stderr重定向(和附加)到一个文件,同时在终端上显示它,我执行以下操作:
command 2>&1 | tee -a file.txt
但是,有没有其他方法可以让我获得退出状态的精确值?
也就是说,如果我测试$?,我希望看到command的退出状态,而不是tee的退出状态。
我知道我可以在这里使用${PIPESTATUS[0]}而不是$?,但我正在寻找另一个不需要检查PIPESTATUS的解决方案。
我有一个bash脚本,在这个脚本中,我执行一个命令并对一个文件执行tee。在检查返回代码时,用于tee <>命令的始终是tee <>。
make all | tee output.log
if [[ $? -ne 0 ]]; then
echo "Make failed"
exit 1
else
blah blah
fi
是否有方法检查第一个命令的返回代码(在本例中是make all )?
我正在尝试获取最后一个命令的状态,还希望输出存储在日志文件中。
{spark_home}/bin/spark-submit .....> 2>&1 | tee -a log1.txt
if [$? -eq 0] ; then
echo " success"
else
echo "fail"
applicationId= $(grep command to get the app id from log1.txt)
但作为$?正在检查“最后状态”命令,它始终显示为“0 ie成功”,因为我正在将输出写入日志文件。有人能帮助我如何获取状态以及写入火
在bash中,如果我在反引号内执行几个命令,我如何才能知道第一个命令的退出状态?
也就是说,在这种情况下,我试图得到"1“。如果不使用反引号,我可以通过PIPESTATUS获得它,但是当我想保存输出时,它似乎不起作用:
## PIPESTATUS[0] works to give me the exit status of 'false':
$ false | true;
$ echo $? ${PIPESTATUS[0]} ${PIPESTATUS[1]};
0 1 0
## doesn't work:
$ a=`false | true`;
$ echo
我正试图创建一个脚本,在计算机上查找输入文件中列出的一些文件,然后将这些文件复制到一个特定的文件夹中。到目前为止,使用for循环和mdfind“命令”\ xargs都可以。但是如果我添加了一个if语句来创建一个输出文件,并列出mdfind没有找到的文件,那么问题就来了。以下是我的实际代码:
if [ $# -eq 0 ]
then
echo "Please introduce the name of the input file after runnig the command.
For this script you need an INPUT.txt file containin
在我的shell scripts1中,它可以工作。
test1.sh
python main.py
if [[ $? -ne 0 ]]
then
exit
fi
test2.sh
python main.py 2>&1 | tee log.txt
if [[ $? -ne 0 ]]
then
exit
fi
脚本2失败。如何在test2.sh中获得python-调用main的返回代码?