找不到简单的命令bash(#!/ usr / bin / expect)

时间:2016-09-26 02:42:07

标签: linux bash terminal expect

我最近开始使用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

简而言之,我正在尝试使用标准bash / terminal命令以及expect命令。我可能会说这一切都错了,所以请纠正我,因为我已经解决了这个问题大约三天并没有走远:(

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

expect使用而非bash。因此,当您使用#!/usr/bin/expect时,您可以在TCL中编写脚本。

例如,echo "BREEZEE 1.0"应写为:

puts "BREEZEE 1.0"

您应该使用exp_send代替send

来自expect manual

  

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

相关问题