Questions tagged «shell»

Shell是Unix的命令行界面。您可以交互地在外壳程序中键入命令,也可以编写脚本来自动执行任务。使用此标记可解决适用于/ bin / sh和大多数兼容shell(ash,bash,ksh,zsh等)的问题。对于有错误的Shell脚本,请在此处发布之前在http://shellcheck.net中对其进行检查。

1
列出shell中的所有btrfs文件系统和子卷
是否有一种便捷的方法来获取所有btrfs文件系统子卷上的信息而无需使用C,即在POSIX shell中? /sys/fs/btrfs仅包含有关文件系统的信息,不包含有关子卷的信息,因此当前我最终将所有文件系统装入temp文件夹,使用进行扫描btrfs subvol list,然后解析结果输出。不用说,这很丑陋。 这是一个3.16.x内核和btrfs-progs v3.14.1(来自Ubuntu 14.10的现货)。 以下是我当前正在使用的(丑陋)脚本。我知道我可以使用纯C获得所需的信息,而这也许最终我会做的,但是我想知道是否有一种更简单,更优雅的方法。 #!/bin/bash for i in /sys/fs/btrfs/*[!features]; do device="/dev/$(basename $i/devices/*)" mountpoint=/var/lib/btrfs/tmp/mnt/$(basename "$i") [ -d "$mountpoint" ] || mkdir "$mountpoint" grep -qs $mountpoint /proc/mounts [ $? -ne 0 ] && mount -v "$device" "$mountpoint" while read -r subvol; do # whatever you want done …
11 shell  btrfs 

4
了解Bash的读取文件命令替代
我试图了解Bash如何正确对待以下行: $(< "$FILE") 根据Bash手册页,这等效于: $(cat "$FILE") 我可以遵循第二行的推理路线。Bash在上执行变量扩展$FILE,输入命令替换,将$FILEto 的值传递cat,cat将其内容$FILE输出到标准输出,命令替换通过用内部命令产生的标准输出替换整行来完成,Bash尝试像执行一个简单的命令。 但是,对于我上面提到的第一行,我的理解是:Bash在上执行变量替换$FILE,Bash打开$FILE以读取标准输入,以某种方式将标准输入复制到标准输出,命令替换完成,并且Bash尝试执行生成的标准输出。 有人可以向我解释$FILEstdin到stdout 的内容如何吗?

2
如何通过du命令仅显示特定扩展名的文件总大小
我在目录中有数百个pdf文件和html文件。我想知道pdf文件的总大小。 通过命令,du -ch /var/foo我可以看到文件的总大小,但是我只需要最后一行,即总大小。 如果目录仅包含pdf文件,我可以使用-s选项,但是这次不能使用该选项。 如何仅获取特定文件类型的总大小?

4
在后台管道命令序列中获取任何命令的PID
如果在中bash执行: cmd1 | cmd2 | ... | cmdi | ... | cmdn & 哪里cmd{1..n}可能没有区别,我该如何获取PID cmdi?或者,我如何发信号通知该cmdi过程?(例如,发送SIGUSR1?) pkill/ pgrep,pidof等看起来不像很好的答案,因为其他情况下cmdi或许运行,包括作为同一管道的一部分。jobs -p给cmd1我的PID 。 i可以是{1..n}。
11 bash  shell  pipe  job-control 

4
测试Shell脚本中telnet端口是否处于活动状态
我正在尝试创建一个脚本来测试是否可以通过telnet登录。我不想真正登录;因此,不需要期望。我只想查看是否能够获得登录提示。这是从Linux系统完成的,所以我一直在尝试使用nc: nc 192.168.10.5 23 -w 1 | grep -q login if [ $? -eq 1 ] then echo "console is down" fi 问题是这导致我的控制台锁定。似乎-w并没有真正取消连接。 我也尝试使用telnet,但无法从脚本内断开连接。试 \echo "\035" | telnet 192.168.10.5 在收到登录提示之前中断。

4
Bash,如何让某些后台进程运行但等待其他进程?
我有(又)其他wait, &,&&控制流的问题.. 假设我有一个类似这样的脚本,我想在同一时间做更多的工作: # may take some hours something InputA > IrrelevantA & something InputB > IrrelevantB & # may take an hour ( somethingElse InputA > OutputA & somethingElse InputB > OutputB & )&& combine OutputA OutputB > Result ...morestuff 问题1:在脚本中,是否在两个进程继续执行的同时combine等待两个somethingElse进程完成something? 问题2:如果不是-我怀疑不是-我如何combine只等待两个somethingElse进程,而something上述进程仍在后台继续工作?

1
在bash中完成POSIX中的间接变量扩展?
有可能吗,或者有一些不错的技巧可以像在Bash中一样在POSIX中进行间接变量扩展? 对于上下文,我正在尝试执行以下操作: for key in ${!map_*} do # do something done 编辑:澄清一下,我想访问以开头的shell变量map_。

3
将文件从Windows共享文件夹复制到Unix
我对Unix完全陌生。我正在编写一个脚本,该脚本会将Windows共享文件夹中的文件复制到Unix。 在Windows中,当我键入\\Servername.com\testfolderRun命令时,我可以看到testfolder。该目录testfolder是整个网络的共享文件夹。 现在,我想将一些文件从该文件复制testfolder到Unix机器上。我应该使用哪个命令?我知道服务器的IP地址,但不知道用户名。
11 shell  samba  file-copy 

3
bash:从-x回显转义单个行
在bash中,使用该-x选项运行时,是否可以排除单个命令的回显? 我正在尝试使输出尽可能整洁,因此我正在使用的子外壳中运行脚本的某些部分set +x。但是,该行set +x本身仍然被回显,并且没有向输出添加任何有价值的信息。 我记得在糟糕的过去.bat,与一起运行时echo on,可以通过以开头来免除单独的行@。bash有任何等效功能吗? #!/bin/bash -x function i_know_what_this_does() { ( set +x echo do stuff ) } echo the next-next line still echoes 'set +x', is that avoidable? i_know_what_this_does echo and we are back and echoing is back on 运行以上命令时,输出为: + echo the next-next line still echoes 'set …
11 bash  shell  debugging 

4
跳过文件的前3个字节
我正在使用AIX 6.1 ksh shell。 我想用一根班轮做这样的事情: cat A_FILE | skip-first-3-bytes-of-the-file 我想跳过第一行的前3个字节;有没有办法做到这一点?

1
如何更改使用find命令找到的多个文件的权限?
我有一个包含大量文件的目录。部分文件具有755权限,另一部分具有644权限。我想将具有755权限的文件转换为644。我已经尝试通过从目录本身运行以下代码行: find . -perm 755 -exec chmod 644 {}\; 但是,结果是,该权限仅更改了目录本身,将其更改回原来的位置后,我发现文件权限保持不变。我想念什么吗?

4
递归重命名与正则表达式匹配的子目录
我有一个媒体服务器,其文件夹名为Series。(/media/Expansion2/Series/) 在其中,我有(惊讶!)电视连续剧。这些只是节目名称,例如,/media/Expansion2/Series/The Big Bang Theory/ 在每个节目的文件夹内(这是问题所在),我有季节文件夹。我目前混合了以下两个约定(可能还有其他几个约定): /media/Expansion2/Series/The Big Bang Theory/The Big Bang Theory Season 1 /media/Expansion2/Series/The Big Bang Theory/Season 2 最后,我想将所有文件夹重命名为just Season #。 作为正则表达式,我可能会说类似 s/.*(Season \d)/$1 仅适用于文件夹,不适用于文件。我可能还应该提到,这是用于大约50多个show sub文件夹的,因此它需要从/media/Expansion2/Series/级别开始并研究每个系列:)

4
Shell中复杂条件的语法是什么?
如果要在shell(sh)中表示以下测试: if ( a == 1 && ( b == 1 || b == 2 )) { ... } 到目前为止,我能写的最好的是: if [[ $a -eq 1 ]]; then if [[ $b -eq 1 || $b -eq 2 ]]; then ... fi fi 我不知道如何复合&&和|| 具有正确的优先级。谷歌搜索没有给我任何答案(教程仅提供基本示例,如果有的话) 将这两个if合并为一个的语法是什么?
11 shell 

10
计算目录中文件数量的最佳方法是什么?
如果解析的输出ls很危险,因为它的输出可能会破坏某些时髦的字符(空格\n,...),那么知道目录中文件数量的最佳方法是什么? 我通常依靠find避免这种解析,但是find mydir | wc -l出于相同的原因,它也会中断。 我现在正在使用Solaris,但是我正在寻找一个尽可能在不同的unice和不同的shell中移植的答案。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.