Linux 在bash中找不到简单命令(!/usr/bin/expect)

Linux 在bash中找不到简单命令(!/usr/bin/expect),linux,bash,terminal,expect,tcl,Linux,Bash,Terminal,Expect,Tcl,我最近开始使用bash通过chntpw自动化windows救援磁盘。我正在尝试设置程序,使用expect命令来侦听某些chntpw对话框问题,并在没有任何用户输入的情况下输入正确答案。由于某种原因,在设置bash脚本后使用/usr/bin/expect而不是/bin/bash之后,许多标准终端命令不再被理解 我通过在终端中键入以下内容来运行脚本: user@kali:~/Desktop/projects/breezee$ bash breezee1.sh 终端输出如下: BREEZEE 1.0

我最近开始使用bash通过chntpw自动化windows救援磁盘。我正在尝试设置程序,使用expect命令来侦听某些chntpw对话框问题,并在没有任何用户输入的情况下输入正确答案。由于某种原因,在设置bash脚本后使用/usr/bin/expect而不是/bin/bash之后,许多标准终端命令不再被理解

我通过在终端中键入以下内容来运行脚本:

user@kali:~/Desktop/projects/breezee$ bash breezee1.sh
终端输出如下:

BREEZEE 1.0
Welcome to BREEZEE
breezee1.sh: line 9: fdisk: command not found
[Select] /dev/:
这是我的密码:

#!/usr/bin/expect
clear
echo "BREEZEE 1.0"
echo "Welcome to BREEZEE"

fdisk -l 
#list partitions
echo -n "[Select] /dev/:"
#ask user to choose primary windows partition
read sda
clear

echo /dev/$sda selected

umount /dev/$sda
sudo ntfsfix /dev/$sda
sudo mount -t ntfs-3g -o remove_hiberfile /dev/$sda /mnt/
cd /mnt/Windows/System32/config

clear
chntpw -l SAM #list accounts on windows partition
chntpw -u Administrator SAM
#now supply chntpw with values to run the password clear (this answers the prompts)

expect '> ' 
send '1\r'
expect '> '
send '2\r'
expect '> '
send '3\r'
expect ': '
send 'y\r'
expect '> '
send 'q\r'
expect ': '
send 'y\r'

clear
echo "Operation Successfull!"
chntpw -l SAM #list accounts on windows partition

简言之,我试图在使用expect命令的同时使用标准bash/terminal命令。我可能完全弄错了,所以请纠正我,因为我已经对此进行了大约三天的故障排除,而且还没有走多远:

当您指定应该运行脚本的应用程序时,您只能使用应用程序能够理解的脚本语言

显然,Expect不是bash,也不理解bash命令


我建议你把这两个脚本分开。写第一部分/bin/bash,Expect的第二个。使第一个脚本调用第二个脚本,并将其重定向到chntpw。

当您指定应运行脚本的应用程序时,您只能使用应用程序能够理解的脚本语言

显然,Expect不是bash,也不理解bash命令

我建议你把这两个脚本分开。写第一部分/bin/bash,Expect的第二个。让第一个脚本调用第二个脚本并将其重定向到chntpw。

expect使用的不是bash。因此,当您使用时,您可以在TCL中编写脚本/usr/bin/expect

例如,echo BREEZEE 1.0应写成:

puts "BREEZEE 1.0"
您应该使用exp_send而不是send

发件人:

exp_send是send的别名。如果您在Tk环境中使用的是Expectk或Expect的其他变体,则Tk定义send的目的完全不同。exp_send是为环境之间的兼容性而提供的。其他Expect的其他send命令也提供了类似的别名

expect使用的不是bash。因此,当您使用时,您可以在TCL中编写脚本/usr/bin/expect

例如,echo BREEZEE 1.0应写成:

puts "BREEZEE 1.0"
您应该使用exp_send而不是send

发件人:

exp_send是send的别名。如果您在Tk环境中使用的是Expectk或Expect的其他变体,则Tk定义send的目的完全不同。exp_send是为环境之间的兼容性而提供的。其他Expect的其他send命令也提供了类似的别名


这实际上很有道理。我刚开始玩bash,我只是想/usr/bin/expect是包含expect支持的另一种bash解释器。显然我错了,这就是我困惑的根源。谢谢!等等,所以我把翻译换成了/bin/bash,我仍然得到fdisk:command未找到问题?更新:添加sudo修复了它。@pattyd:另外,使用bash breezee1.sh等运行脚本时,无论使用什么脚本,它都将作为bash脚本运行!电话里说。通常,您应该使脚本可执行,例如chmod+x breezee1.sh,然后使用类似于./breezee1.sh的东西来运行它们,它让shebang控制它的运行方式。这实际上很有意义。我刚开始玩bash,我只是想/usr/bin/expect是包含expect支持的另一种bash解释器。显然我错了,这就是我困惑的根源。谢谢!等等,所以我把翻译换成了/bin/bash,我仍然得到fdisk:command未找到问题?更新:添加sudo修复了它。@pattyd:另外,使用bash breezee1.sh等运行脚本时,无论使用什么脚本,它都将作为bash脚本运行!电话里说。一般来说,您应该使脚本可执行,例如chmod+x breezee1.sh,然后使用类似于./breezee1.sh的东西运行它们,这样shebang就可以控制它的运行方式。