我正在尝试从文件中读取用户和服务器详细信息tempo.txt
,然后使用另一个脚本检查该 unix 帐户上文件系统的磁盘空间使用情况server_disk_space.sh
。但我无法弄清楚为什么 while 循环仅适用于第一行和 for 循环工作正常。请帮助我理解这一点。
使用while循环
#!/usr/bin/ksh
while read line
do
r1=`echo $line | cut -d"#" -f1`;
r2=`echo $line | cut -d"#" -f2`;
apx_server_disk_space.sh $r2 $r1
done<tempo.txt
Run Code Online (Sandbox Code Playgroud)
输出
8
Run Code Online (Sandbox Code Playgroud)
使用 for 循环
#!/usr/bin/ksh
for line in $(cat tempo.txt)
do
r1=`echo $line | cut -d"#" -f1`;
r2=`echo $line | cut -d"#" -f2`;
apx_server_disk_space.sh $r2 $r1
done
Run Code Online (Sandbox Code Playgroud)
输出
8
23
54
89
12
Run Code Online (Sandbox Code Playgroud)
的内容 server_disk_space.sh
#!/usr/bin/ksh
user=$1
server=$2
count=`ssh ${user}@${server} "df -h ."`
echo ${count} | …
Run Code Online (Sandbox Code Playgroud) 我需要编写一个脚本,如果Enter按下,它将向文本文件添加一行。
但是,如果按下Ctrl+ D,我需要在 bash 中退出该循环。
touch texttest.txt
LINE="0"
while true; do
read LINE;
if [ "$LINE" == "^D" ]; then
break
else
echo "$LINE" >> texttest.txt
fi
done
Run Code Online (Sandbox Code Playgroud)
目前有类似的东西,但无法弄清楚当按下Ctrl+D而不是Enter.
我有一个使用标准输入和输出的控制台程序。
例如我打电话给:./program_name
然后我输入输入
我需要在一个命令中执行这两个操作,例如:(./program_name 'my input string'
此命令返回Abort trap: 6
)。
怎么做?
我没有程序的源代码。
一个很奇怪的情况。如果我输入交互式命令 - 在这种情况下tasksh
,nslookup
我不能输入空格。例如:
tasksh> add "my new task"
Run Code Online (Sandbox Code Playgroud)
变成
tasksh> add"mynewtask"
Run Code Online (Sandbox Code Playgroud)
并且不工作,自然。我想也许这与此有关,tasksh
但后来我以nslookup
交互模式进行了检查-这是同一回事。这会在 linux4.6.7-1-MANJARO
上发生,但不会在 OpenSUSE Leap 42.1 上发生。
我应该如何解决这个非常令人讨厌的事情?
我尝试运行不同的终端(gnome-terminal、xfce4-terminal、xterm),它给出了相同的结果。
我目前正在做一个项目,我想通过模拟 PS/2 键盘,用 AVR 控制我的 PC。出于这个原因,我目前拥有所有必需的硬件和一些软件库,例如AVR 的https://github.com/ndusart/ps2-keyboard和http://python-evdev.readthedocs.io/en/latest/ PC 部分的index.html。
我还从阅读有关的PS / 2协议http://www.pcbheaven.com/wikipages/The_PS2_protocol/,http://www.computer-engineering.org/ps2protocol/和http://retired.beyondlogic.org/键盘/keybrd.htm
然后我运行了命令sudo cat /dev/input/by-path/platform-i8042-serio-0-event-kbd > ./kbrd.hex
并连接了键盘,然后按下并释放退格键。
我会除了类似的东西AA 66 F0 66
,也许还有一些FA
(ACK)介于两者之间,但我得到的是非常不同的:
所以我的问题是:
这可能是由于我对 /dev/input/ 的工作行为的误解造成的,还是问题出在我设置的其他部分?我希望从 /dev/input/ 的缓冲区中获取原始输入,这不是我认为的原始输入。
ssh
我已通过终端登录到远程服务器。由于服务器故障或网络问题,连接被终止。
然后出现一些烦人的东西。一旦我在终端上单击鼠标,它会自动输入如下内容:
$ 0;85;36M0;85;36m0;94;38M32;95;38M0;95;38m0;68;42M32;67;42M32;66;42M32;65;42M32;65;41M32;64;41M32;63;41M32;62;41M32;61;41M32;60;41M32;59;41M32;58;41M32;57;41M32;55;41M32;54;41M32;53;41M32;52;41M32;51;41M32;50;41M32;49;41M0;49;41m
这些东西到底是什么?有没有办法阻止或减少它们而不需要重新启动终端?
> cat b.txt
function first
{
foo=$(SOMEMAGIC)
}
echo nyi | first
>
Run Code Online (Sandbox Code Playgroud)
问题:我们如何将“nyi”字符串赋予函数内的“foo”变量?那么我们如何将通过管道提供给函数的数据传递给函数内部的变量呢?
为什么在一个空文件夹执行ls > empty.txt
显示我empty.txt内empty.txt?
这不是诗,这是真的,我不知道为什么。
对我来说,他们的思考方式ls > empty.txt
是循序渐进的:
ls
被执行,我得到输出(在那一刻无效)>
意味着我得到了上一个命令的输出(实际上fd 2
)empty.txt
是获取ls
(无)输出的文件的名称。那为什么要跑
猫空.txt
我得到
empty.txt
Run Code Online (Sandbox Code Playgroud)
如果文件夹是空的?
我正在下载 cuda-toolkit-10-1,遵循https://docs.nvidia.com/cuda/wsl-user-guide/index.html中的指南,包括将我的 WSL 从版本 1 更新到版本 2。即将结束apt-get install
当我的内存可能耗尽时,我的
安装在解压时出现错误消息:dpkg: error processing archive /tmp/<cuda_vers>.deb: error setting permissions of <file.so>: Read-only file system
错误代码(2)。
我释放了一些内存并尝试通过 apt-get 重新安装,但出现错误消息dpkg was interrupted, you must manually run 'sudo dpkg --configure -a to correct the problem
,我尝试失败dpkg: error: unable toa ccess dpkg status area: Read-only file system
。
我现在无法运行大多数命令。以下是一些错误消息及其各自的错误
消息ls
::-bash: /bin/ls: Input/output error
df -u
Sorry, command-not-found has crashed! Please file a bug report..., Python version: …
传递输入时,哪种方法更好?
> echo 'test' | base64
dGVzdAo=
> base64 <<< 'test'
dGVzdAo=
Run Code Online (Sandbox Code Playgroud)
对于变量,应该使用哪种方法?
> t='test'
> echo "$t" | base64
dGVzdAo=
> base64 <<< "$t"
dGVzdAo=
Run Code Online (Sandbox Code Playgroud)