我想编写一个 shell 脚本,它将接受一些带有一些选项的参数并打印这些参数。假设该脚本的名称是abc.ksh. 该脚本的用法是 -
./abc.ksh -[a <arg>|b <arg>|c|d] <some_string>
现在我编写一个 shell 脚本,它将接受选项和参数
#!/bin/ksh
# Default Values
vara=","
varb=false
varbname=""
varc=false
# Scanning inputs
while getopts :a:b:cd option
do
case $option in
a) vara=$OPTARG;;
#shift $((OPTIND-1));;
b) varb=true
varbname=$OPTARG;;
#shift $((OPTIND-1));;
c) varc=true;;
#shift $((OPTIND-1));;
d) echo "Usage $0 \-[a|b|c|d] <filename>"
exit 0;;
\?) echo "Invalid option -$OPTARG. Please run '$0 -h' for help"
exit 1;;
:) echo "Option -$OPTARG requires an argument. Please run '$0 -d' for …Run Code Online (Sandbox Code Playgroud) 我有许多 sql 文件要导入。对于单个文件,我使用以下命令:
mysql -u root -p dbname < db.sql
是否可以使用 xargs 批量导入所有文件?就像是:
ls *.sql | xargs ....
我知道 mysqlimport 是解决方案,但我想知道 xargs 是否可以。
我有一个 bash 脚本正在读取大量数据 /dev/random。我需要用户随机键入以播种随机守护进程。然而,一旦脚本完成,输入的所有内容都将转储到命令输入。这是代码:
for i in ${users_thing[@]}
do
pass[${num}] = $(dd if=/dev/random status=noexfer bs=1 count=128 | base64) & #generate password
echo -n "Creating password: `expr $num + 1` of $sizes "
#tell what's going of
echo -en "\033[s"
while [[ $(jobs) != *Exit* ]] #while the program is still running
do
for j in ${spinny_thing[@]} #now spin
do
echo -en "\033[u\033[1D$j "
done
done
echo ""
num=`expr $num + 1`
done
Run Code Online (Sandbox Code Playgroud)
所以我希望能够在不中断前台进程的情况下转储标准输入,因此read由于它暂停而被淘汰。有可能如何绘制它/dev/null吗?
只是为了提供一些上下文,我正在尝试运行此命令
echo "set hive.execution.engine=tez;" | hive
Run Code Online (Sandbox Code Playgroud)
一旦“set hive.execution.engine...”进入hive交互式shell,hive就会终止,
我想让它留在 hive 交互式 shell 中,但是 shell 然后终止,我又回到了普通的 linux shell。
例如,bash 位于 /bin/bash 下,这意味着它是一个命令,每个命令都有三个 (0,1,2) 孔:标准输入、标准输出、标准错误。
这对于 shell 是否也是 100% 正确的,还是因为 shell 作为命令或进程的特殊含义而有什么不同?
我有一个程序需要一些不可打印的字符,如0x0F ( ctrl+ o) 作为输入来执行程序的预期部分。
0 000 00 NUL � Null char
1 001 01 SOH  Start of Heading
2 002 02 STX  Start of Text
3 003 03 ETX  End of Text
4 004 04 EOT  End of
Run Code Online (Sandbox Code Playgroud)
它正在命令行上执行,知道如何将不可打印的字符作为程序的输入插入命令行吗?
我目前正在寻找以下代码的替代方案,该代码的工作方式不那么“不稳定”。
printf "Please enter the ticket number:\t"; read vTICKET; vTICKET=$(printf %04d "$vTICKET"); printf "$vTICKET\n";
Run Code Online (Sandbox Code Playgroud)
如果我输入072作为输入,这就是我看到的
Please enter the ticket number: 072
0058
Run Code Online (Sandbox Code Playgroud)
我想知道是否有另一种方法可以让我对输入或read命令更加宽容?printf似乎是在不实际测试字符串长度的情况下添加前导零的酷方法。
我需要将按键虚拟发送到终端程序(如vi或emacs)。
我想做这样的事情:
echo -e 'iHello, world!\e' | vi
Run Code Online (Sandbox Code Playgroud)
然后使用此缓冲区打开一个vi会话:
Hello, world!
~
~
~
~
~
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为vi不通过stdin读取击键。
我收到此错误:
ex/vi: Vi's standard input and output must be a terminal
Run Code Online (Sandbox Code Playgroud)
如何将一些文本字符串发送到终端程序,就像直接在键盘上键入字符串一样?
我在grymoire 中阅读了以下内容:
一个简单的例子是将“旧”文件中的“day”更改为“new”文件中的“night”:
sed s/day/night/ <old >new或者另一种方式(对于 UNIX 初学者),
sed s/day/night/ old >new
为什么作者会认为第一种形式更高级?
我的意思是,与“初学者”语法相比,使用这种形式有什么优势?
我正在使用 uinput 编写一种虚拟键盘,并在研究我应该输入的内容时
ioctl(fd, UI_SET_KEYBIT, ???);
Run Code Online (Sandbox Code Playgroud)
我发现input-event-codes.h. 有些常量是不言自明的 ( KEY_1, KEY_D, ...),但有些则有点神秘。
是否有任何文档列出并解释了这些键码?我试过谷歌,但BTN_TRIGGER_HAPPY没有把我带到任何有用的地方:/这个键码有什么用?
PS:如果有完整列表的地方,那将是很好的,有几个挺有意思的(KEY_HIRAGANA?KEY_102ND...?)。
input ×10
bash ×3
shell-script ×3
command-line ×2
apache-hive ×1
exit ×1
getopts ×1
header-file ×1
input-method ×1
keyboard ×1
ksh ×1
mysql ×1
numeric-data ×1
options ×1
pipe ×1
printf ×1
shell ×1
standard ×1
terminal ×1
xargs ×1