Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

2
用bash逐字符阅读
我一直在尝试使用bash逐字符读取文件。 经过多次试验和错误,我发现这可行: exec 4<file.txt declare -i n while read -r ch <&4; n=0 while [ ! $n -eq ${#ch} ] do echo -n "${ch:$n:1}" (( n++ )) done echo "" done 即,我可以逐行读取它,然后逐字符逐个循环。 在执行此操作之前,我已经尝试过: exec 4<file.txt && while read -r -n1 ch <&4; do; echo -n "$ch"; done 但是它将跳过file中的所有空格。 你能解释为什么吗?有没有办法使第二种策略(即用bash的read逐字符读取char)起作用?
8 bash  readline 

4
如何获得与ls的相对路径?
我想做这样的事情来移动最近下载的两个文件: mv ` ls -rt ~/Downloads/ | tail -2 ` . 不幸的是,ls只给出了文件名。如何修改上面的代码? (在有人指出之前,我知道管道输出的问题ls。只有在知道有问题的文件名时才使用它。)
8 linux  bash  ls 


1
设置shopt extglob的范围限制是什么?和其他选择?
我的非交互式bash shell具有extglob off。我想在命令之前的语句中将其打开,但是我注意到,当shopt -s extglob在一个if .. then .. else块中时,它会以某种方式无法注册。 以下依赖于extglob的命令无效:syntax error near unexpected token '('。 哪里可以extglob设置,为什么有限制呢?这是否适用于其他选项?... GNU bash 4.1.5 这有效: shopt -s extglob if true ;then touch a.bcd; ls a.@(bcd) fi 这将失败: if true ;then shopt -s extglob touch a.bcd; ls a.@(bcd) fi ... line 17: syntax error near unexpected …
8 bash  shopt 

1
Bash脚本不读取输入
我有一个脚本,该脚本应该在后台运行命令,并且可以执行该命令。问题在于,当脚本执行读取命令时,它不会暂停并接受输入。这里是: printf "Where is yo music?: " read musicPath cd $musicPath ls | while read currentSong;do seconds=`mdls "$currentSong"|sed -n '20p'|awk '{print $3}'|cut -d. -f1` hours=$((seconds / 3600)) seconds=$((seconds % 3600)) minutes=$((seconds / 60)) seconds=$((seconds % 60)) echo "Song: $currentSong" echo "Length: $hours:$minutes:$seconds" afplay "$currentSong"& printf "yes (y), no (n), or …

2
当sh是bash或破折号的符号链接时,bash会将其自身限制为POSIX兼容,因此它应该与sh 100%兼容吗?
从bash和sh之间的区别: ABck的问题:如果你有/bin/sh一个链接的bash,那么bash将不会调用时为具有相同的行为/bin/sh,因为它不会在调用时/bin/bash。当称为时sh,它将限制自己为大多数POSIX兼容以及一组有限的扩展。 这是否意味着每当我在Linux中遇到带有shebang的shell脚本时#!/bin/sh,即使在该发行版上,它bin/sh都是到另一个shell(例如破折号或bash)的符号链接,它应该与bourne shell 100%兼容,因为是否将自身限制为一组有限的扩展名?这样我可以在FreeBSD中执行它们吗?有例外吗?还是我应该确定它会起作用? 因此,如果在发行版上bin/sh是的符号链接bin/bash,并且使用了脚本#!/bin/sh并且该脚本包含bashism,则该脚本将不会运行,因为bash会喜欢处于sh模式?

1
如何找出shell脚本是用bash还是sh编写的
如何确定脚本是用bash还是写的sh? 脚本的第一行在这里没有帮助,因为在Linux上,bash脚本具有以下行: #!bin/sh 实际上,有很多发行版/bin/sh是bash(也许/bin/sh是/bin/bash这些发行版中的链接),而不是Bourne Shell。因此,如果我尝试在FreeBSD中运行以bash编写的脚本,则结果未定义,因为/bin/sh在FreeBSD中是Bourne Shell,而不是bash。 有没有简单的方法可以识别脚本是bash还是sh? 语法中有一些与众不同的东西吗?

4
cp或rsync,cp真的值得吗?
我希望这不会算作一个问题,没有一个真正的答案,因为我似乎无法找到一个很好的理由使用cp(1)了rsync(1)在几乎所有情况。如果一个典型的青睐rsync了cp?有什么好的使用指南吗? rsync:传输差异文件,可以使用压缩,可以远程使用(安全地使用),即使中断也可以重新启动,即使在传输单个大文件时也可以。' cp:也许使用起来更简单?它比rsync快吗?
8 bash  shell  rsync  utilities  cp 

4
在给定字符串之前按字母顺序查找文件
如果我有一个充满文件和子目录的目录。仅列出按字母顺序位于给定字符串前的常规文件的最佳方法是什么? 目前,使用bash可以做的最好的事情如下: for x in `find . -maxdepth 1 -type f | sort` do if [[ "$x" > './reference' ]] then break fi echo $x done 我觉得有一种更简洁的方法可以执行此操作,但是我不确定它是什么。有任何想法吗?
8 bash  filter 

3
在passwd中导出HTTP_PROXY和特殊字符
假设为了论证,我在下面输入的密码是 abc123@ 我需要通过公司代理对我的linux计算机进行身份验证,以获取补丁和更新...通常,我会使用以下命令: export HTTP_PROXY='http://<Americas\Username>:<Password>@proxy.foo.com' export http_proxy='http://<Americas\Username>:<Password>@proxy.foo.com' 但是,当我用以结尾的真实密码替换@然后运行时aptitude update,我得到... [mpenning@netwiki ~]$ sudo -E aptitude update Err http://mirror.anl.gov squeeze Release.gpg Could not resolve '@proxy.foo.com' Err http://mirror.anl.gov/debian/ squeeze/main Translation-en Could not resolve '@proxy.foo.com' 我尝试用\@,,,\@\@双字符(@@)来转义密码,并且似乎没有什么可以正确地代理此密码。直到最近更改了密码,我才开始遇到问题。 退出密码的正确方法是什么bash?



6
使grep输出而不尾随换行符
请考虑以下代码段: X=$(grep -m1 'some-pattern' some-file | sed -n 's/.* //p') 如果某个模式条件与任意文本文件中的行匹配,我想将最后一个单词放在变量中 我的问题是,变量最后X要有CR或LF或CRLF,具体取决于要删除的源文件,因为它干扰了我打算执行的后续操作。 我什至尝试过类似的方法: X=$(grep -m1 'some-pattern' some-file | sed -n 's/.* \([A-Za-z]\+\)/\1/p') 因此,期望sed输出受到限制,[A-Za-z]+但X变量中仍然有此讨厌的字节。 我怎样才能摆脱它,而无需使用像看到的是什么字节在结束了太多的代码,xxd那么cut它和类似的并发症?
8 bash  grep 

7
Linux脚本或程序以缩短文件名
我找不到Linux版本的namemangler并没有取得很大的成功,我需要重命名1000个文件,以便它们在Windows上可读。 有谁知道可以执行此操作的Linux程序? 如果没有,那么脚本可能会起作用,因为我只需要将文件夹中的所有文件重命名为前16个字符。我怀疑脚本路线可能值得一试,但不确定从哪里开始。

4
在已安装的ntfs系统上显示最近2天的文件?
显示小于2天的文件的确切命令是什么?我想到了这样的事情: $ find / -mtime -2 ...但是我不确定如何打印找到的文件的日期。我的目标是在已安装的ntfs系统上查找最近几天内新的或已更改的文件。 此外,将结果从最新到最旧的排序将非常有帮助。那可能吗?

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.