Questions tagged «bash»

Bash(Bourne-Again SHell)是默认情况下在Ubuntu命令行界面中使用的shell。

2
sudo -s命令的作用是什么,在本示例中如何使用?
我有以下疑问。在与软件安装相关的教程中,我要说的是我必须执行以下命令(我正在ssh shell中执行此命令,因此此步骤列表以exit命令结尾): sudo -s apt-get update apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen exit 我的怀疑是: 命令-s后,该参数到底做什么sudo? 在网上搜索后发现: -s [命令] -s(shell)选项运行由SHELL环境变量指定的shell(如果已设置)或密码数据库中指定的shell。如果指定了命令,则通过外壳的‑c选项将其传递到外壳以执行。如果未指定命令,则执行交互式shell 在我看来,sudo -s使用shell的环境变量执行命令。 但这对我来说还不清楚:在这种情况下,使用环境变量执行的命令是什么?(它仅执行sudo -s而不是sudo -s [command])。

1
如何知道是否有可用的更新?
我正在运行12.04 LTS ubuntu服务器。而且我认为如果能够在更新可用时得到通知会很好。但我找不到方法 我尝试查看apt-get手册页。从中我可以用来apt-get -s upgrade在脚本中获取apt-get输出,而不会阻塞问题。 现在,我清楚地看到了区别: 有可用的更新: apt-get -s upgrade Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be upgraded: dpkg dpkg-dev libdpkg-perl 3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst dpkg [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64]) Conf …
8 apt  updates  bash  php 

2
当我在pwd中已经有一个名为“〜kernel-ppa”的文件夹时,为什么cd〜k(&选项卡)扩展为cd〜kernoops?
我有一个名为~kernel-ppainside 的文件夹~/Downloads。 aditya@aditya-desktop:~$ cd Downloads/ aditya@aditya-desktop:~/Downloads$ ls ~kernel-ppa 现在,当我键入cd ~k并按Tab以进行自动扩展时,尽管已存在具有相同起始字符的文件夹cd ~kernoops/,cd ~kernel-ppa/但外壳程序会将其扩展为。 为了使自动扩展正常工作,我需要使用对其进行转义\。因此,使用cd \~k并Tab正确按可以将其扩展为cd \~kernel-ppa/。即使使用cd \并按下Tab也能解决问题。 为什么会这样,为什么我需要逃脱?此外,由于~自动扩展甚至不需要,我还能逃脱什么? 如果我按照流程运行cd ~kernoops/并按Enter,则终端状态将更改为//: aditya@aditya-desktop:~/Downloads$ cd ~kernoops/ aditya@aditya-desktop://$ pwd // aditya@aditya-desktop://$ ls bin cdrom etc initrd.img lost+found mnt proc run srv tmp var boot dev home lib media opt root sbin sys usr vmlinuz aditya@aditya-desktop://$ …

1
Bash历史记录键盘快捷键!*
在Bash中,有一些方便的运算符可以重复执行最后一条命令: !^ 扩展到上一个命令的第一个参数,例如, $ echo one "two three" one two three $ echo !^ echo one one !$ 扩展到上一个命令的最后一个参数,例如, $ echo one "two three" one two three $ echo !$ echo "two three" two three !* 扩展到上一个命令的所有参数,例如, $ echo one "two three" one two three $ echo !* echo one …

3
在Shell脚本中评估字符串
我正在遵循此bash shell脚本指南: http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html 在“数字比较”部分中,引用了一个示例: anny > num=`wc -l work.txt` anny > echo $num 201 anny > if [ "$num" -gt "150" ] More input> then echo ; echo "you've worked hard enough for today." More input> echo ; fi 上面发生的事情是,我们在bash变量中存储了一串命令,然后在该变量上调用echo。似乎发生的事情是对字符串求值并执行wc命令并将行数返回到控制终端。 好的,所以我在Ubuntu 12.04中启动终端并尝试类似的操作: $ touch sample.txt && echo "Hello World" > …

2
使用contab使用bash脚本创建Screen会话
我希望每次服务器启动时都运行一个.jar文件(我们使用的是VPS),因此我使用crontab -e,然后添加来编辑crontab @reboot bash /home/bash/startserver.sh。但是我什至还没有达到脚本可以工作的地步。 这是我的脚本: #!/bin/bash screen -S bukkit cd $HOME/server java -jar bukkit.jar 我需要使用的原因screen是,当我启动bukkit.jar时,它将进入控制台,在该控制台中,我可以为该程序输入更多命令(不过,我确信您对该站点上的Minecraft及其服务器都非常熟悉。 ,哈哈),但我需要能够在运行时以root用户的身份对其他程序执行其他命令,甚至关闭我的PuTTY会话。 唯一的问题是,运行此脚本时,它将创建一个屏幕会话,但是ID 为,因此ID 未在中列出screen -ls。相反,我必须去/run/screen/S-root查找ID,然后screen -X -S $name quit在其上使用典型的ID 。 也许这甚至是不可能的,或者实际上有一个更简单的方法可以做到这一点(我想更简单),但是我不知道为什么这不起作用。并且如果可行,screen -S bukkit在运行bash脚本时是否可以重新加入会话?(我想有多个问题,但是非常感谢您的帮助!(括号))

2
Oneliner命令使用kill给定的TCP端口号代替PID?
我经常做 sudo netstat -lpn |grep :8088 查看输出 tcp6 0 0 :::8088 :::* LISTEN 11189/java 然后 sudo kill -kill 11189 我想有一个更方便的命令,就像killatport 8088该命令使用tcp端口号作为变量,并且可以将其用作执行所需功能的管道的别名,但是如何从输出和管道中获取PID它对kill命令?我想我也许可以使用awk从netstat的输出中获取PID,但是我该如何维护并精确匹配端口,以使输入80与8080不匹配?我应该改为使用C程序吗?还是已经有一个像这样的小工具?

1
为什么将$ 0设置为-bash?
第一个登录进程名称似乎设置为-bash,但是如果我使用subshel​​l,它将变为bash。例如: root@nowere:~# echo $0 -bash root@nowere:~# bash root@nowere:~# echo $0 bash -bash 导致某些脚本失败,例如 . /usr/share/debconf/confmodule exec /usr/share/debconf/frontend -bash Can't exec "-bash": No such file or directory at /usr/share/perl/5.14/IPC/Open3.pm line 186. open2: exec of -bash failed at /usr/share/perl5/Debconf/ConfModule.pm line 59 有人知道为什么$0设置为-bash吗?

1
如何在Ubuntu 13.04中将自定义键盘快捷方式链接到bash脚本?
作为Ubuntu 13.04用户,我自己也遇到了这个最新版本的Ubuntu的各种问题和不兼容性。其中之一是,在我安装了一些软件包之后,“系统设置->亮度和锁定”选项卡的亮度栏突然消失了(我真的不记得它是什么)。我发现一种解决方法是使用xbacklight。 作为我自己的练习,我编写了一个简短的脚本,以便使用来自终端的xbacklight轻松地增加和减少亮度。该脚本是可执行文件(具有执行权限),是一个包含在我的.bashrc文件中$ PATH中的目录,并链接至别名(“ blup”增加,“ bldn”减少屏幕亮度)。因此,我的两个别名(blup / bldn)在终端线路上工作正常。接下来,我想将它们链接到一些键盘快捷键(例如F2 / F3)。我是在“系统设置->键盘->快捷方式->自定义快捷方式”中执行此操作的,但是它不起作用。 为什么? 此外,是否有一种方法可以“发现”在哪里以及如何执行其他(非自定义)键盘快捷键命令?例如,上调音量的快捷键执行的是什么终端线,连接到什么别名(如果有)以及它们放在什么目录下(/ usr / bin,其他...)? 作为脚本编写的新手,我将不胜感激! 谢谢 PS1当然,只需将一个命令“ xbacklight -inc / -dec 10”粘贴到自定义键盘快捷键上,它将正常工作。我只是想抓住机会,对脚本的编写和执行有更多的了解。 PS2我的问题与以下问题不同:如何使用键盘快捷键启动bash脚本?,即我不将'〜/'用作'/ home / user /'。

3
使用popd而不删除最后一个值
如何在popd没有实际弹出最后一个目录的情况下获得使用的行为?换句话说,我想导航回到我设置的最后一个目录pushd,但是我希望它保留在堆栈的顶部,因此下popd一个目录会将我带到同一目录(该目录仍然位于目录的顶部)。堆栈)。

3
让用户仅使用GUI(隐藏终端)为bash脚本输入密码的正确方法
我制作了一个bash脚本,专门使用kdialog与用户进行交互。它是从“ .desktop”文件启动的,因此用户永远不会看到终端。它看起来100%像一个GUI应用程序(即使它只是一个bash脚本)。它仅在KDE(Kubuntu 12.04)中运行。 我唯一的问题是安全,方便地处理密码输入。我找不到令人满意的解决方案。 该脚本旨在以普通用户身份运行,并在首次需要sudo命令时提示输入密码。这样,大多数不需要sudo权限的命令都以普通用户身份运行。发生的情况(从终端运行脚本时)是提示用户输入一次密码,并且默认的sudo超时允许脚本完成,包括所有其他sudo命令,而无需再次提示用户。这也是我希望它也可以在GUI后运行的方式。 主要问题是使用kdesudo启动我的脚本(这是标准的GUI方式)意味着整个脚本由root用户执行。因此,文件所有权分配给了根用户,我不能~/在路径中依赖它,而其他许多事情都不理想。以root用户身份运行整个脚本只是一个非常不令人满意的解决方案,我认为这是一个不好的做法。 我非常感谢让用户通过GUI一次输入sudo密码而不以root身份运行整个脚本的任何想法。谢谢。
8 bash  scripts  sudo  gui  kde4 


4
如何在终端中返回脚本的上一行?
我正在尝试编写脚本,但我被卡在这里。请查看代码! aug@august:~/play$ for i in {1..100..4} > do > echo "august" > touch august $i+$2 > mkdir dir 有什么办法走上一行吗?我的意思是我在中打错了touch august $i+$2。按下ENTER键,所以我换了新的电话。如何返回上一行?

5
防止Nautilus显示安装在bash脚本中的分区
在我的bash脚本中,我挂载分区,检查分区,将文件复制到分区,然后卸载。当脚本安装分区时,Nautilus会弹出一个窗口,显示该分区并窃取焦点。这是我要避免的事情。 注意:我知道我可以在“系统设置”,“详细信息”,“可移动媒体” Never prompt or start programs on media insertion中更改此行为,但是我不想更改此行为,例如,如果插入了USB记忆棒,我只是想在bash脚本中阻止它。由于此脚本在其他用户的计算机上运行,​​因此我无法修改这些设置(在脚本中),因为如果该脚本异常终止,则会将修改后的设置保留在原处(我也不认为应该这样做)。 实际上,这种自动显示似乎不一致。如果我从终端执行完全相同的命令,则Nautilus不会显示,并且我知道脚本中还有其他未显示的安装。那么是什么原因造成的呢?这是代码示例(均会弹出单独的Nautilus窗口): mount $dev $target mkdir -p $target/home mount $homedev $target/home 我对了解挂载信号通知Nautilus的过程以及发生这种情况的原因感兴趣(如果我从终端挂载分区则不然)。防止这种情况发生的最佳方法是什么。 我注意到从11.10版开始(如果我没记错的话)这种行为。我当前正在运行12.04,但是该脚本必须在所有受支持的发行版上均有效。我不认为该解决方案应该涉及修改系统设置(不同版本之间可能会有所不同)。例如,如果您查看其他安装分区的事物(例如os-prober),则在安装不同分区时不会弹出nautilus窗口。 脚本可以在这里找到。而这里的部分地方鹦鹉螺持久性有机污染物。我认为它也在这里弹出,但我一直将测试重点放在第一个链接上。这是不弹出的地方,在其他挂载之前被调用-请注意,我已经将第一个改写为--read-only,并且在if语句中,并且没有区别。 理想情况下,答案将解释为什么会发生这种情况以及如何防止这种情况发生,换句话说,就是解释为什么将脚本mount与终端发出的脚本区别对待。如果它是一个经过充分说明的解决方案并且可以支持所有桌面环境(ubuntu,kubuntu,xubuntu,lubuntu等),那么一种不错的解决方法也将被接受-我也希望避免为了验证它而进行的测试呈指数级增长。 提前致谢 ============ 根据papashou的链接的解决方案: add_udev_rules () { for i in "$dev" "$homedev" "$bootdev" "$usrdev"; do if [ -n "$i" ]; then block=${i#/dev/} echo "KERNEL==\"""$block""\",ENV{UDISKS_PRESENTATION_HIDE}=\"1\"" >> "$wubi_move_dir"/wubi_move.rules fi …
8 nautilus  bash 

1
使用autocd更改路径后自动运行ls
因此,每次更改目录时,我都希望新路径自动以列出ls。如果使用更改了路径,则cd有解决方案,但我从未找到使用该autocd选项更改路径时能起作用的解决方案。 会很方便,以前有人做到过吗?
8 command-line  bash  ls  zsh 

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.