Questions tagged «bash»

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

4
ln -s具有相对于pwd的路径
我正在尝试创建一堆符号链接,但我不知道为什么这行得通 ln -s /Users/niels/something/foo ~/bin/foo_link 而这 cd /Users/niels/something ln -s foo ~/bin/foo_link 不是。 我相信这与foo_link链接到foo /Users/niels/bin而不是/Users/niels/something 因此,问题是,如何在不实际输入的情况下创建指向绝对路径的符号链接? 作为参考,我使用的是Mac OS X 10.9和Zsh。
26 bash  shell  symlink  ln 

7
需要sudo的脚本是否应该失败(如果没有),或者使用sudo和提示符?
我有一个脚本,可以对背光亮度进行精细控制,并且需要sudo运行。本质上是这样的: backlight="/sys/class/backlight/acpi_video0/brightness" echo $1 | tee $backlight 并居住在~/bin/backlight-adjust。该脚本需要sudo特权,因为tee $backlight正在写入特权位置。因此,如果不与一起运行,它将失败sudo。 这种方法有一个问题,因为我不能随便跑sudo backlight-adjust,因为~/bin不在$PATH的sudo环境下,只有在我的环境。所以我必须运行sudo env "PATH=$PATH" backlight-adjust或类似的方法。 或者,我可以这样写: backlight="/sys/class/backlight/acpi_video0/brightness" echo $1 | sudo tee $backlight 并提示我输入密码。 第二种方法对我来说更好,因为我不必记住键入sudo。它会提示我。而且我可以保持$PATH原样。总体上来说,这样做更方便,但是有什么原因使我不应该第二种方式呢? (如果正在运行Xubuntu 14.04,并且我的shell是GNU bash 4.2.45,则可以这样做。)

5
为什么遍历文件比将文件读入内存和计算两次快两倍?
我正在比较以下 tail -n 1000000 stdout.log | grep -c '"success": true' tail -n 1000000 stdout.log | grep -c '"success": false' 与以下 log=$(tail -n 1000000 stdout.log) echo "$log" | grep -c '"success": true' echo "$log" | grep -c '"success": false' 令人惊讶的是,第二个比第一个要花几乎三倍的时间。它应该更快,不是吗?
26 bash  performance  io 


2
即使在我的路上,Bash仍未找到程序
我在路上有一个程序。使用指定的完整路径执行时,程序将运行。但是当我仅使用其名称运行该程序时,找不到该程序。 本质上,我想了解以下输出是如何实现的,以及如何解决该问题,以便在没有指定完整路径的情况下可以实际找到我的程序: root:/usr/local/bin# ./siege **************************************************** siege: could not open /usr/local/bin/etc/siegerc run 'siege.config' to generate a new .siegerc file **************************************************** root:/usr/local/bin# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games root:/usr/local/bin# siege bash: /usr/bin/siege: No such file or directory root:/usr/local/bin# wtf!?!? 我在使用bash的Ubuntu 12.04上。另外请注意,由于此问题的目的,围困的警告输出并不重要,因为我仅对是否可以找到并调用该程序感兴趣。
26 bash  path 

4
如何在bash中调试和修复缓慢的自动完成功能?
在最近更新(Ubuntu 12.04 LTS)之后,命令行上的TAB完成速度很慢。输入部分命令(例如evi [TAB])或部分文件名(例如evince somedocu[TAB])后,外壳有时(尽管并非总是)挂起几秒钟。 就个人而言,我宁愿使用功能较弱的自动完成程序也不愿使用较慢的自动完成功能。有简单的解决方法吗? 编辑:与评论有关的其他信息: PATH非常标准。〜/ bin有一些bash脚本 $ echo $PATH /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games 工作目录中的文件数少于100。 在异常磁盘活动(系统升级)之后,自动完成功能特别慢。因此,有可能重新读取/ usr / bin和其他目录会导致延迟。

5
将输出打印到3个单独的列
MYPATH=/var/www/html/error_logs/ TOTALFILE=$(ls $MYPATH* | wc -l) FILETIME=$(stat --format=%y $MYPATH* | head -5 | cut -d'.' -f1) FILE=$(ls -1tcr $MYPATH* | head -5 | rev | cut -d/ -f1 | rev) TOPLINE=$(head -1 $MYPATH* | grep -Po '".*?"' | head -5) 我如何优雅地将这5个文件信息打印到带有标题的列中? FILE CREATED TIME | FILE NAME | ERROR HEADER …

1
执行没有键绑定的readline函数?
我刚读了readline手册页,发现了一堆我不知道的好命令。但是,有些没有默认的键绑定。有没有办法从外壳执行未绑定的命令? 我不是在问如何在〜/ .inputrc中绑定命令,而是如何从外壳或bash脚本中以“一次性”执行命令。 例如,“转储变量”命令。是否有一些命令可以将“ dump-variables”作为参数执行?
26 bash  shell  readline  inputrc 

4
如何输入名称为减号的目录?
我将课程下载到我的Web服务器并解压缩。 它包含一个名为的文件夹-。我以为我知道该如何处理,但我不知道。 我试过了cd -- -,但是没有达到预期的效果。使用引号似乎也没有影响。我在所有地方都放了斜线,无济于事。 更改为此文件夹的正确方法是什么?
26 bash  cd-command 

2
当未设置可执行位时,为什么不能根执行?
root即使未设置其权限,用户也可以写入文件write。 root用户可以读取文件,即使read未设置其权限也是如此。 root即使未设置其权限,用户也可以 cd进入目录execute。 root用户未设置权限时无法执行文件execute。 为什么? user$ echo '#!'$(which bash) > file user$ chmod 000 file user$ ls -l file ---------- 1 user user 12 Jul 17 11:11 file user$ cat file # Normal user cannot read cat: file: Permission denied user$ su root$ echo 'echo hello' >> file # …



7
反转布尔变量
我想尝试简单的脚本 flag=false while !$flag do read x if [ "$x" -eq "true" ] then flag=true fi echo "${x} : ${flag}" done 但是,当我运行它时,如果键入true,我会看到x="true"和flag="true",但是循环并没有结束。脚本有什么问题?如何正确地将布尔变量取反?
26 bash  scripting 

8
将配置文件用于我的Shell脚本
我需要为自己的脚本创建一个配置文件:这里是一个示例: 脚本: #!/bin/bash source /home/myuser/test/config echo "Name=$nam" >&2 echo "Surname=$sur" >&2 内容/home/myuser/test/config: nam="Mark" sur="Brown" 可行! 我的问题是:这是正确的方法还是其他方法?

2
在bash脚本中,如何逐行捕获stdout
在bash脚本中,我想逐行捕获长命令的标准输出,以便可以在初始命令仍在运行时对其进行分析和报告。这是我可以想象的复杂方法: # Start long command in a separated process and redirect stdout to temp file longcommand > /tmp/tmp$$.out & #loop until process completes ps cax | grep longcommand > /dev/null while [ $? -eq 0 ] do #capture the last lines in temp file and determine if there is new …
26 bash  process  stdout 

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.