标签: bash

如何使用鼠标在 bash 上移动命令行光标

当使用 bash(在终端中)执行很长的命令时,能够使用鼠标将光标设置到任意位置通常很有用。在 Mac-Os 中,alt(Option)键具有此效果(使用 alt+click)。

我开始使用Linux,这个选项不起作用。我相信有某种方法可以更新 ~/.inputrc 来启用此选项。你知道这样的方法吗?

linux terminal bash inputrc

4
推荐指数
1
解决办法
1万
查看次数

bash 从字符串末尾开始排序

我想按第一个文件对文件进行排序,但最后一个字符是最重要的。

例如表单文件:

"AAAACTTTTT"                    1       2

"AAAACAAAAA"    1       2       6       4
Run Code Online (Sandbox Code Playgroud)

到:

"AAAACAAAAA"    1       2       6       4

"AAAACTTTTT"                    1       2
Run Code Online (Sandbox Code Playgroud)

我试过:

sort -k1,1 file
Run Code Online (Sandbox Code Playgroud)

当然这是行不通的,但我不知道该怎么做。你可以帮帮我吗?也许有一些秘密旗帜?

bash sorting

4
推荐指数
1
解决办法
6437
查看次数

将命令通过管道传输到 nc

我似乎搜索了许多非常相似的问题,但从未找到有用的东西。我正在尝试使用树莓派(第二代)与 Wifi OBDII 传感器进行通信。我可以使用以下命令

nc -C 192.168.0.10 35000
Run Code Online (Sandbox Code Playgroud)

192.168.0.10 是汽车传感器,35000 是端口。这并不重要,因为连接似乎没问题。无论如何,我可以打开一个 nc 实例,然后键入,例如“0145”(传感器代码),作为回报,我在 nc 会话的输出上得到该传感器的值(例如,我的引擎的 RPM) )。效果很好。我想做的是将命令从文本文件传输到 nc 会话中以进行绘图。因此,我的理想结果是将 RPM 值和相关时间的恒定流转储到文本文件中。我可以从那里工作。但是,我并不完全知道该怎么做。我已经设置了一个commands.txt,其中有数千行“0145”,我想读取该文件并将其逐行传递给nc(我可能可以通过睡眠来控制采样间隔),然后读取输出并将其存储到文本文件中。我知道这个问题与标准输入和标准输出以及管道有关,但无论出于何种原因,我一直无法完全理解它。我绝不是其中任何一个的大师。我还想编写整个过程的脚本。

现在,如果我跑

cat <(echo 0145) - | nc -C 192.168.0.10 35000
Run Code Online (Sandbox Code Playgroud)

这为我提供了我想要的终端输出,但仅适用于单个值。但是,一旦我尝试将其放入循环中,将 0145 放入脚本中的 $commands 中,并从 txt 文件中逐行获取 $commands ,它就停止工作。事实上,即使我将其保留为 0145 并且不使用变量,它也会在任何循环或 if 块内停止工作。

所以,长话短说,我想编写脚本将 txt 文件逐行发送到 nc 连接,然后我想将每个响应提取到另一个文件中。如果它是无脚本的,我可以打开该 nc 连接并每 1 秒发送 0145 并获取这些响应(仍然不知道如何将它们传递到文件),但这几乎没有效率。我觉得应该有一种更简单的方法来做到这一点。我有点菜鸟,但我想我可以在这里尝试一下。任何帮助是极大的赞赏

linux bash cat netcat stdin

4
推荐指数
2
解决办法
1万
查看次数

如何将子目录的所有文件移动到另一个目录

我的文件具有以下结构:

11
--11a
-----a.jpg
-----b.jpg
-----....
--11b
-----d.jpg
-----g.jpg
...
Run Code Online (Sandbox Code Playgroud)

我想将所有 .jpg 文件放在一个文件夹中

11
-a.jpg
-b.jpg
-d.jpg
-g.jpg
...
Run Code Online (Sandbox Code Playgroud)

基本上我有包含许多 .jpg 文件的子文件夹,我想将它们全部移动到一个目录(例如父目录)。

我已经尝试过: mv */*.jpg all但我明白了-bash: /bin/mv: Argument list too long

一些帖子建议xargs和其他一些查找解决方案,但不幸的是似乎没有什么对我有用。

bash command-line macos

4
推荐指数
1
解决办法
7397
查看次数

Linux Bash 的 Windows 子系统 - 如何向上和向下分页?

标题说明了一切。也许这只是我的笔记本电脑,但我运行的是 Ubuntu 16.04 for WSL,并且没有按键组合允许我向上或向下翻页。我尝试了 Ctrl、Shift、PgUp、PgDn 和箭头键的每种组合。

bash windows-subsystem-for-linux

4
推荐指数
1
解决办法
2882
查看次数

为什么 dd 不输出到 stdout?

这是我遇到问题的命令

username@computer /current/working/directory
$ dd if="$filename" bs=1 seek=10 count=10 conv=notrunc status=progress^C
0+0 records in
0+0 records out
0 bytes copied, 1.70242 s, 0.0 kB/s
Run Code Online (Sandbox Code Playgroud)

测试输出到文件审判(为了理智?)

username@computer /current/working/directory
$ dd if="$filename" bs=1 seek=10 count=10 conv=notrunc status=progress of=test
22+0 records in
22+0 records out
22 bytes copied, 0.0115305 s, 1.9 kB/s
Run Code Online (Sandbox Code Playgroud)

环境

username@computer  /current/working/directory
$ echo $filename
somefile.ext

username@computer /current/working/directory
$ dd --version
dd (coreutils) 8.26
Packaged by Cygwin (8.26-1)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version …
Run Code Online (Sandbox Code Playgroud)

windows cygwin bash command-line dd

4
推荐指数
1
解决办法
6044
查看次数

Bash 终端无法正确换行文本

我正在将gnome-terminalbash 与 bash 一起使用,当我有一个应该越过该行的命令时,它只会保留在同一行上。所以而不是:

echo "abcdefghijklmnopqrstuvwxyz"
Run Code Online (Sandbox Code Playgroud)

我会得到

opqrstuvwxyz""abcdefghijklmn
Run Code Online (Sandbox Code Playgroud)

或者类似的东西。但是,如果我按 Enter 键,该命令仍然有效。我相信这与我的 PS1 变量有关,但我不知道它出了什么问题。这里是:

export PS1='\e[1;35m[\u:\w]\$\e[0;35m '
Run Code Online (Sandbox Code Playgroud)

linux terminal bash

4
推荐指数
1
解决办法
5114
查看次数

bash 中循环遍历目录和子目录

我尝试使用这一行,从包含我要循环的文件夹的父文件夹开始:

for dir in */; do  
    cd $dir  
    for dir2 in */; do  
        cd $dir2  
        ls -d $PWD/*  
        cd ..  
    done  
    cd ..  
done
Run Code Online (Sandbox Code Playgroud)

但它只是输出我整个计算机的全部内容并返回到根文件夹 /~ ...这种行为有什么解释吗?

bash ubuntu

4
推荐指数
1
解决办法
3万
查看次数

tar:通过管道输入时使用“--one-top-level”

我正在尝试下载一个 tar (有效)并立即将其解压到一个子目录(最好与存档名称相同)。我认为以下代码应该可以工作,但它尝试将写入解压文件写入 STDOUT 并失败。

\n\n
wget -O - https://ufal.mff.cuni.cz/~zabokrtsky/courses/npfl104/data/classification/artificial_objects.tgz | tar -xvz --one-top-level\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果(非常神秘的失败):

\n\n
...\nSaving to: \xe2\x80\x98STDOUT\xe2\x80\x99\n...\nCannot write to \xe2\x80\x98-\xe2\x80\x99 (Success).\n
Run Code Online (Sandbox Code Playgroud)\n\n

不指定--one-top-level可以解决问题,但随后内部的文件将按预期提取到当前文件夹。

\n\n

用两个单独的命令执行此操作:首先下载它,然后用中间文件解压,再次按预期进行。

\n\n
...\nSaving to: \xe2\x80\x98STDOUT\xe2\x80\x99\n...\nCannot write to \xe2\x80\x98-\xe2\x80\x99 (Success).\n
Run Code Online (Sandbox Code Playgroud)\n\n

我知道我可以创建一个子文件夹并使用 -C 更改 tar 的输出目录,但我宁愿理解为什么我的方法不起作用。

\n\n

TAR v2016

\n

bash tar

4
推荐指数
1
解决办法
4886
查看次数

当我从命令行生成 SSH 公钥时,为什么我的主机名会附加到它?

当我在 Ubuntu 上通过 Bash 文件生成 SSH 密钥时,我的 PC 的计算机名称(我猜就是这样)会自动添加到该 SSH 密钥中。

这是在 bash 文件中生成密钥的部分:

# Create new ssh-key
echo | ssh-keygen -P ''

# Cat the ssh-key to print on the screen
cat ~/.ssh/id_rsa.pub

Output: ssh-rsa AAAAB....JpyT+gt pc172@pc172-centre-540S-03ILL
Run Code Online (Sandbox Code Playgroud)

为什么这部pc172@pc172-centre-540S-03ILL分会添加到生成的密钥中?

上面的部分类似于我的终端内路径之前显示的文本。

c172@pc172-centre-540S-03ILL:/var/www/new-project-ubuntu$ 
Run Code Online (Sandbox Code Playgroud)

ssh bash ubuntu ssh-keys

4
推荐指数
1
解决办法
7553
查看次数