我想将密码作为输入,但我希望用户能够像其他实用程序处理它一样输入它,即字符不会出现在屏幕上。我试着搜索这个,但没有找到确切的答案。
我需要接收一个变量,然后我会将输入与来自脚本开头的配置文件之一的预定义独立密码硬编码变量相匹配。
$./startScript
username: mtk
password: ********
Run Code Online (Sandbox Code Playgroud)
*
显示为占位符。我需要这部分不可见。当前,密码在用户键入时显示。
这该怎么做?
假设我有一个以confirmation.sh
以下内容命名的文件:
#!/bin/bash
echo -n "Are you sure [Y/n]? "
read line
case "$line" in
n|N) echo "smth"
;;
y|Y) echo "smth"
;;
esac
Run Code Online (Sandbox Code Playgroud)
我想通过以下方式运行这个脚本:
cat confirmation.sh | sh
Run Code Online (Sandbox Code Playgroud)
我看到Are you sure [Y/n]?
了,剧本被打断了。有什么问题?
对于类,我需要编写一个 Bash 脚本来获取输出ispell
,当我尝试在 while 循环中请求用户输入时,它只会将文件的下一行保存为用户输入。
我怎样才能在 while 循环中请求用户输入?
#!/bin/bash
#Returns the misspelled words
#ispell -l < file
#define vars
ISPELL_OUTPUT_FILE="output.tmp";
INPUT_FILE=$1
ispell -l < $INPUT_FILE > $ISPELL_OUTPUT_FILE;
#echo a new line for give space between command
#and the output generated
echo "";
while read line;
do
echo "'$line' is misspelled. Press "Enter" to keep";
read -p "this spelling, or type a correction here: " USER_INPUT;
if [ $USER_INPUT != "" ]
then
echo "INPUT: $USER_INPUT";
fi
echo ""; …
Run Code Online (Sandbox Code Playgroud) 此脚本一行接一行地接受用户输入,并myfunction
在每一行上执行
#!/bin/bash
SENTENCE=""
while read word
do
myfunction $word"
done
echo $SENTENCE
Run Code Online (Sandbox Code Playgroud)
要停止输入,用户必须按[ENTER]
,然后按Ctrl+D
。
如何重建我的脚本以仅结束Ctrl+D
并处理Ctrl+D
按下的行。
我一直试图弄清楚如果我Ctrl+D使用read -N 1
inbash
和ksh93
.
我知道传输结束字符和文件结束条件之间的区别,并且我知道Ctrl+D在使用read
without时会做什么-N
(它发送 EOT,如果输入为空,则底层read()
返回零,发出信号EOF)。
但我不确定为什么尝试读取特定数量的字符会如此彻底地改变这种行为。我会期望 EOF 条件并且以下循环将退出:
while read -N 1 ch; do
printf '%s' "$ch" | od
done
Run Code Online (Sandbox Code Playgroud)
按下时输出Ctrl+D:
0000000 000004 0000001
该bash
手册说,关于read -N
(ksh93
也有类似的措辞):
-N nchars
; read 在完全读取nchars
字符后返回,而不是等待完整的输入行,除非遇到 EOF或读取超时。
...但它没有说明将 TTY 切换到原始/无缓冲模式(这是我假设正在发生的情况)。
该-n
选项read
似乎在关于以同样的方式工作Ctrl+D,并且要读取的字符数目似乎没有任何关系。
我如何read -N
向循环发出结束输入信号并退出循环(除了测试读取的值),为什么这与“裸”不同read
?
我知道以前有人问过这个问题,但几乎只提供了解决方法。还没有解决我的问题。
我正在尝试创建自己的.sh
文件,该文件将生成一个apk
. 使用 jarsigner 后,它要求输入我的密钥库的密码。现在这部分的安全性对 atm 不起作用,所以我只是想知道,我怎样才能(删除我的.keystore
文件的密码或以纯文本形式输入密码)实现这一目标?
完整命令:
jarsigner -sigalg SHA1withRSA -digestalg SHA1 -verbose -keystore keyForApk.keystore
apk/android-release-unsigned.apk alias_name
Run Code Online (Sandbox Code Playgroud)
然后它提示我以下内容:
Enter Passphrase for keystore:
Run Code Online (Sandbox Code Playgroud)
现在我可以通过哪个命令在 jarsigner 命令之后动态输入它?
我最近从 Debian 8 升级到了 Debian 9 扩展版。显然他们不再使用synaptics
/synclient 来控制触摸板输入。我正在寻找的是一个简单的命令来按需启用或禁用触摸板功能,使用libinput
.
使用突触驱动程序,我使用了命令,
synclient TouchpadOff=1
Run Code Online (Sandbox Code Playgroud)
禁用“垫”,和
synclient TouchpadOff=0
Run Code Online (Sandbox Code Playgroud)
当我想要它回来的时候。
简单直接。我经常在不经常使用鼠标的情况下长时间打字,而触摸板会无意中接收到输入,将我的光标扔在整个文档上。我不想永久禁用,也不想自动禁用(IE,每当检测到 USB 鼠标或检测到打字时),我只希望它在打开时打开,在我需要时关闭离开。
只需一个简单的命令即可按需启用或禁用打击垫。谁能帮我这个?我一直在寻找某种方法来做到这一点,而不必对系统进行永久性更改,但似乎找不到任何东西。没有其他人做这样的事情吗?我真的宁愿不必回到 Debian 8 只是为了恢复命令功能,但我实际上正在考虑它,尽管看起来很荒谬。
我更喜欢终端命令解决方案,但 GUI 也很好,如果有人知道的话。在这一点上我几乎会接受任何东西,我认为这里的关键是一个简单的、切换开/关的解决方案。我不能是唯一一个试图解决这个问题的人。
如何设置 Solaris 系统,以便每次创建用户并将其分配给特定组时,都会将特定文件放置在该用户的主目录中?
将一些连续的命令粘贴到终端停止使用用户输入的命令,例如:
read VAR
echo $VAR
Run Code Online (Sandbox Code Playgroud)
或者
select VAR in 1 2 3; do break; done
echo $VAR
Run Code Online (Sandbox Code Playgroud)
echo $VAR
没有被粘贴/执行。
将所有命令放在一行上虽然有效:
read VAR; echo $VAR
Run Code Online (Sandbox Code Playgroud)
但是当有更多命令跟随时,这不是首选。
为什么会出现这种情况以及如何解决?
我的用例是在服务文档中有一些重复的命令。
我当然可以编写一个脚本,但这不是我打算做的,并且在仅具有读取访问权限的系统上可能无法实现。
我目前正在用 bash 编写一个 nemo 动作脚本,我需要一种方法来从用户那里获取输入。
怎么办?,运行动作脚本时终端不显示。
反正有没有在GUI中弹出一个查询窗口来询问用户输入?
Slurm 是工作负载管理器。有两种运行作业的模式,交互(srun)和批处理模式(sbatch)。
使用交互模式时,需要让终端保持打开状态,这可能会给远程终端(笔记本电脑)带来额外的负担。
但是sbatch模式只需要提交bash脚本(*.sh)就可以关闭远程终端。以下所有步骤均由计算节点处理。
当我运行可执行程序时,它提示“所有文件名都正确吗?” 并期待“是”。我想要的是脚本在运行 *.sh 文件时自动为这个提示输入“是”,以便程序可以在没有交互的情况下继续。
如果您需要任何进一步的说明,请告诉我。
我有一个 bash 脚本,其结构如下:
\n\nwhile read foo bar baz;\ndo\n echo "Processing $foo $bar $baz"\n # more code here\ndone < /etc/somefile\n
Run Code Online (Sandbox Code Playgroud)\n\n在循环内,我希望脚本等待键盘输入(基本上只是“按 Enter 继续”。但是,循环内的以下代码
\n\necho "Press [ENTER] to continue"\nread -s\n
Run Code Online (Sandbox Code Playgroud)\n\n不会\xe2\x80\x99t 导致脚本停在那里\xe2\x80\x94 显然它从提供的文件而不是键盘获取输入。如何强制它从键盘读取?
\n我想用这个脚本做的动作是
执行或不执行该操作。
我有 while 循环和读取输入的问题。我试过这个:
#!/bin/csh -f set DIR = 'pwd' find $DIR -name * -exec basename {} \; | while read filename do read -p $filename" (y or n?)" selection if ($choice = "y") then <> endif end
但我收到错误:
find: `basename' terminated by signal 13.
Run Code Online (Sandbox Code Playgroud)
我也在考虑再次使用一段时间来扩展用户的输入,直到给出是或否,但这是一个二阶问题。