我执行脚本,例如其中之一如下。 它按我的预期工作。该文件将发送到远程PC,所有复制输出,包括可能的错误将存储在带有扩展名日志的文件中。
#!/bin/bash
scp /tmp/v8_8PcnYL_41.sh evgeniy@Ubuntu-VM2:/tmp/v8_8PcnYL_44.sh >> "/tmp/v8_8PcnYL_42.log" 2>&1
但是,如果执行PC和ssh服务器是同一台PC,则无法工作。在这种情况下,我收到错误“:不明确的重定向 1”, 但是,如果我在终端中执行第二行,则不会出现错误,并且操作将按预期执行。 那么,为什么会发生这种情况呢?那么遇到这种情况该怎么办?
Ubuntu 18.04,还有 22.04
为了更好地理解这里是控制台输出:
evgeniy@Ubuntu-VM2:~$ sudo su usr1cv8
[sudo] Enter password for evgeniy:
$ cat /tmp/v8_8PcnYL_43.sh
#!/bin/bash
scp /tmp/v8_8PcnYL_41.sh evgeniy@Ubuntu-VM2:/tmp/v8_8PcnYL_44.sh >> "/tmp/v8_8PcnYL_42.log" 2>&1
$ ls -lha /tmp/v8_8PcnYL_43.sh
-rwxr-x--x 1 usr1cv8 grp1cv8 111 сен 28 20:34 /tmp/v8_8PcnYL_43.sh
$ bash /tmp/v8_8PcnYL_43.sh
: ambiguous redirect 1
$
$ scp /tmp/v8_8PcnYL_41.sh evgeniy@Ubuntu-VM2:/tmp/v8_8PcnYL_44.sh >> "/tmp/v8_8PcnYL_42.log" 2>&1
$ cat /tmp/v8_8PcnYL_42.log
$ exit
evgeniy@Ubuntu-VM2:~$ cat /tmp/v8_8PcnYL_44.sh
#!/bin/bash
cd ~/
/opt/mssql-tools/bin/sqlcmd -S CHECK -U sa -P [hidden] -h -1 -b -Q "SELECT name FROM master.dbo.sysdatabases"
exit $?
evgeniy@Ubuntu-VM2:~$
该脚本有 DOS 行结尾。最大的线索是错误消息:
: ambiguous redirect 1
缺少通常位于
:
之前的部分,用于标识生成消息的工具和导致错误的字符串。
请参阅为什么我的工具输出会覆盖自身以及如何修复它?了解有关 DOS 行结尾以及如何修复它们的更多信息。