Bash,总是在条件语句中回应

时间:2011-07-20 20:53:33

标签: bash

这可能更像是一个思考练习,但是我试图在一个有条件的命令执行命令之后回应换行符。例如,我有:

if ssh me@host [ -e $filename ] ; then
  echo "File exists remotely"
else
  echo "Does not exist remotely"
fi

并且想要在ssh命令之后抛出一个回声而不管结果如何。原因是格式化;这样,在提示输入ssh密码后,就会出现换行符。

首先尝试

if ssh me@host [ -e $filename ] && echo ; then

因为&& echo不会更改条件结果,但如果echo返回false,则bash不会执行ssh。类似地,

if ssh me@host [ -e $filename ] || (echo && false) ; then

不起作用,因为如果ssh返回true,它将会短路。

问题的答案是

ssh me@host [ -e $filename ]
result=$?
echo
if [ $result == 0 ] ; then

但是想知道是否有一些类似的条件表达式来做到这一点。

感谢。

3 个答案:

答案 0 :(得分:3)

虽然这样可行

if foo && echo || ! echo; then

我更喜欢把整个事情都放到一个函数中

function addecho() {
    "$@" # execute command passed as arguments (including parameters)
    result= $? # store return value
    echo
    return $result # return stored result
}

if addecho foo; then

答案 1 :(得分:2)

这个怎么样?

 if ssh me@host [ -e $filename ]  && echo || echo; then

我没有考虑&&的优先顺序和||并且肯定会添加一些括号会有所帮助,但是就像它已经有效一样......当ssh失败并且成功时它会得到回声......

答案 2 :(得分:2)

在文件名测试之前添加“echo”

if ssh me@host "echo; [ -e $filename ]"; then
  echo "File exists remotely"
else
  echo "Does not exist remotely"
fi