这可能更像是一个思考练习,但是我试图在一个有条件的命令执行命令之后回应换行符。例如,我有:
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
但是想知道是否有一些类似的条件表达式来做到这一点。
感谢。
答案 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