为什么我的相等字符串不相等?
Why are my equal strings not equal?
我发现了很多相同的问题,但没有解决方案帮助我。
listingInOrder.sh
set user [lindex $argv 0]
set dir [lindex $argv 1]
set password [lindex $argv 2]
set N [lindex $argv 3]
spawn ssh $user@pool$N.physik.hu-berlin.de ls -1tr $dir | tail -1
expect "Password:"
send "$password\r"
interact
mainfile.sh
filelocal=`ls -1tr $localdir | tail -1`
fileremote=`expect listingInOrder.sh $user $remotedir $password $N | tail -1`
if [[ "$filelocal" != "$fileremote" ]]; then
echo "not equal"
echo "$filelocal"
echo "$fileremote"
fi
但输出是:
not equal
blatt3A2.m
blatt3A2.m
所以名字是一样的。这里有什么问题?
去掉$fileremote
末尾的space:
fileremote=`expect listingInOrder.sh $user $remotedir $password $N | tail -1`
fileremote=${fileremote% }
我终于找到了解决办法。不知何故 \r 在字符串的末尾。
$ HEXVAL=$(xxd -pu <<< "$fileremote")
$ echo "$HEXVAL"
给我以下十六进制字符串输出:
626c6174743341322e6d0d0a
而 0d0a 显示为 \r。
sed $'s/\r//'
修剪了字符串,现在可以使用了。
我发现了很多相同的问题,但没有解决方案帮助我。
listingInOrder.sh
set user [lindex $argv 0]
set dir [lindex $argv 1]
set password [lindex $argv 2]
set N [lindex $argv 3]
spawn ssh $user@pool$N.physik.hu-berlin.de ls -1tr $dir | tail -1
expect "Password:"
send "$password\r"
interact
mainfile.sh
filelocal=`ls -1tr $localdir | tail -1`
fileremote=`expect listingInOrder.sh $user $remotedir $password $N | tail -1`
if [[ "$filelocal" != "$fileremote" ]]; then
echo "not equal"
echo "$filelocal"
echo "$fileremote"
fi
但输出是:
not equal
blatt3A2.m
blatt3A2.m
所以名字是一样的。这里有什么问题?
去掉$fileremote
末尾的space:
fileremote=`expect listingInOrder.sh $user $remotedir $password $N | tail -1`
fileremote=${fileremote% }
我终于找到了解决办法。不知何故 \r 在字符串的末尾。
$ HEXVAL=$(xxd -pu <<< "$fileremote")
$ echo "$HEXVAL"
给我以下十六进制字符串输出:
626c6174743341322e6d0d0a
而 0d0a 显示为 \r。
sed $'s/\r//'
修剪了字符串,现在可以使用了。