Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

4
vim:用+ x位创建文件
+x创建时有什么方法可以设置脚本位吗? 例如,我运行: vim -some_option_to_make_file_executable script.sh 保存后,我可以运行文件而无需任何其他动作。 ps。我可以从控制台运行chmod,vim甚至可以从控制台运行,但这有点烦人,原因是vim建议重新加载文件。chmod每次键入命令也很烦人。pps。使其取决于文件扩展.txt名将是很棒的(我不需要可执行文件:-))


1
.bashrc和.inputrc有什么区别
我是unix系统的新手,发现在诸如.bashrc和的设置文件中创建自定义功能和配置很有趣.inputrc。 但是,我不了解两者之间的区别。例如,当我创建别名时,将它们放在中.bashrc。 Example 1: alias ...='cd ../../' 当我创建诸如使用箭头键查找上一个或下一个命令之类的操作时,会将命令放入中.inputrc。 Example 2: "\e[A": history-search-backward 为什么需要将它们放在不同的设置文件中?我如何区分何时放置在何处? 先感谢您!

4
如何使bash glob成为字符串变量?
系统信息 作业系统:OS X bash:GNU bash,版本3.2.57(1)-发行版(x86_64-apple-darwin16) 背景 我希望时间机器从我的所有git / nodejs项目中排除一组目录和文件。我的项目目录在其中~/code/private/,~/code/public/因此我尝试使用bash循环来执行tmutil。 问题 精简版 如果我有一个计算得出的字符串变量k,那么如何在for循环之前或之内使其全局: i='~/code/public/*' j='*.launch' k=$i/$j # $k='~/code/public/*/*.launch' for i in $k # I need $k to glob here do echo $i done 在下面的长版中,您会看到k=$i/$j。因此,我无法在for循环中对字符串进行硬编码。 长版 #!/bin/bash exclude=' *.launch .classpath .sass-cache Thumbs.db bower_components build connect.lock coverage dist e2e/*.js e2e/*.map libpeerconnection.log node_modules npm-debug.log …

2
如何从分区设备名称获取块设备名称?
我正在寻找一种可移植的方式来获取/dev/sda给定分区设备名称(例如/dev/sda1)的父块设备名称(例如)。我知道我可以删除最后一个字符,但在某些情况下不起作用: MMC读卡器的名称通常为/dev/mmcblk0,而其分区的名称则为/dev/mmcblk0p1(请注意p)。 可选:某些块设备根本没有任何分区表,并且被格式化为单个分​​区。在这种情况下,分区设备和父块设备相同。 LVM的体积完全不同。我现在不需要支持他们,但是如果考虑到他们需要很少的额外努力,我也不会介意。

4
给定两个后台命令,当其中一个退出时,终止其余命令
我有一个启动两个服务器的简单bash脚本: #!/bin/bash (cd ./frontend && gulp serve) & (cd ./backend && gulp serve --verbose) 如果第二个命令退出,则似乎第一个命令继续运行。 我如何更改此设置,以便如果其中一个命令退出,另一个命令终止? 注意,我们不需要检查后台进程的错误级别,只需检查它们是否已经退出即可。

3
头/尾的负参数
这个问题的变体当然已经在不同的地方被问过几次了,但是我试图M从文件中删除最后几行而没有运气。 在第二个最投票的答案在这个问题建议做以下摆脱在文件的最后一行: head -n -1 foo.txt > temp.txt 但是,当我在OSX和Zsh中尝试该操作时,我得到: head: illegal line count -- -1 这是为什么?我如何删除M 最后一个行和在第一个 N给定文件的行?

5
如何在shell脚本中放弃root特权?
OpenVPN中的“ --up”选项通常用于路由等。因此,在OpenVPN放弃root特权以无人运行的情况下进行处理。但是,我正在调用需要以非特权用户身份运行的shell脚本。 我怎么做?我研究了Drop Process Privileges,特别是多项式和tylerl的答案,但是我不知道如何实现。我在Centos 6.5中工作,并且suid被阻止为“ chmod u + s”和“ setuid()”。 有一个OpenVPN插件(“ openvpn-down-root.so”),该插件使“ --down”选项调用的脚本能够以root用户身份运行。可能存在等效项,例如“ openvpn-up-user.so”,但我没有找到它。 编辑0 根据Nikola Kotur的回答,我已经安装了Ian Meyer的runit-rpm。尽管chpst命令在终端中有效,但在up脚本中,它失败并显示“找不到命令”。起作用的是“ sudo chpst”以及设置适当的显示和语言。请参阅为什么我的终端无法正确输出unicode字符?鉴于此,up脚本需要以下四行: LANG="en_US.UTF-8"; export LANG GDM_LANG="en_US.UTF-8"; export GDM_LANG DISPLAY=:0; export DISPLAY sudo chpst -u user -U user /home/user/unprivileged.sh & 编辑1 根据0xC0000022L的评论,我发现“ sudo -u用户”和“ sudo chpst -u用户-U用户”一样有效: LANG="en_US.UTF-8"; export LANG GDM_LANG="en_US.UTF-8"; export …

4
从标准输出中删除行尾字符?多行成一行
我有一个脚本,输出以下文本。这是Netopia 2210-02 ADSL2调制解调器的输出。 ADSL Line State: Up ADSL Startup Attempts: 1 ADSL Modulation: DMT ADSL Data Path: Fast Datapump Version: DSP 7.2.3.0, HAL 7.2.1.0 SNR Margin: 8.20 9.00 dB Line Attenuation: 57.50 31.00 dB Output Power: 17.09 12.34 dBm Errored Seconds: 0 0 Loss of Signal: 0 476 Loss of …

1
使用curl通过FTP上传多个文件
我正在尝试使用curl通过FTP将当前文件夹内的所有文本文件上传到服务器位置。我尝试了以下行: curl -T "{file1.txt, file2.txt}" ftp://XXX --user YYY 其中XXX是服务器的IP地址,而YYY是用户名和密码。 我能够将file1.txt成功传输到服务器,但它抱怨第二个文件说“无法打开'file_name'!”。 我交换了文件名,它适用于file2.txt,而不适用于file1.txt。似乎我的语法有误,但这是手册所说的吗? 另外,理想情况下,我将能够执行以下操作: curl -T *.txt ftp://XXX --user YYY 因为我并不总是知道当前文件夹中txt文件的名称或要传输的文件数。 我认为我可能必须编写一个bash脚本,将bash的输出收集ls *.txt到一个数组中,然后将其放入curl所需的多文件格式。 我之前没有做过bash脚本编写-这是实现这一目标的最简单方法吗?
14 shell-script  ftp  curl 

4
循环浏览文件夹并列出文件
我有一个名为“ sample”的文件夹,并且其中有3个文件。我想编写一个Shell脚本,它将读取示例文件夹中的这些文件,并使用curl将其发布到HTTP站点。 我写了以下文件列出文件夹中的文件: for dir in sample/*; do echo $dir; done 但这给了我以下输出: sample/log sample/clk sample/demo 它在其中附加了父文件夹。我希望输出如下(没有父文件夹名称) log clk demo 我该怎么做呢?

1
在脚本中使用sudo时,如何通过GUI提示询问密码?
我将Trisquel GNU / Linux与GNOME闪回桌面环境一起使用。我需要一个GUI密码提示符,以便用户sudo在脚本中执行命令。示例考虑以下脚本: zenity --question --text="Do you want to install this package?" if [[ $? -eq 0 ]]; then sudo apt-get install package else zenity --warning fi 将以以下方式(运行)执行,即不在终端内执行: 因此,需要输入密码才能运行命令,sudo否则将无法完成工作。 因此,如何通过GUI提示询问密码?

4
捕获SIGINT等时保留出口代码吗?
如果我在退出之前使用trap了http://linuxcommand.org/wss0160.php#trap上所述的捕获ctrl-c(或类似文件)和清理功能,那么我将更改返回的退出代码。 现在,这在现实世界中可能不会有所作为(例如,因为退出代码不是可移植的,而且如进程终止时默认退出代码中所讨论的那样,退出代码并不总是明确的?),但我仍然想知道是否存在真的没有办法防止这种情况,而是返回被中断脚本的默认错误代码吗? 示例(在bash中,但我的问题不应被视为bash特定): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now my return code will be 1. ' _ 输出: $ ./test.sh …

5
如何在Shell脚本中比较程序的版本?
假设我想比较gcc版本以查看系统是否安装了最低版本。 要检查gcc版本,我执行了以下命令 gcc --version | head -n1 | cut -d" " -f4 输出是 4.8.5 因此,我写了一个简单的if语句来对照其他值检查该版本 if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then echo "Less than 5.0.0" else echo "Greater than 5.0.0" fi 但这会引发错误: [: integer expression expected: 4.8.5 我理解我使用字符串进行比较并且-lt需要整数的错误。那么,还有其他方法可以比较版本吗?

1
名为“ test”的可执行文件位于$ PATH中,但不会运行
我在$ HOME / bin中有一个文件(在您询问之前,是的,它在我的路径中)test,我已经确认可以在使用文件的完整路径运行该文件时执行该文件。但是,如果不这样运行,就会遇到一个非常奇怪的问题。当我只test在终端中运行时,它什么也不做,并立即返回。我知道,由于以下几个原因,这不是查找文件的问题: 没有错误信息。通常,如果找不到或无法执行该文件,则会显示一条消息,提示您。 运行which test仍会返回正确的文件路径。 可能是所有方法中最怪异的-运行脚本时,脚本工作正常strace。我尝试使用strace看看是否可以弄清楚发生了什么,但是当我使用进行运行时strace,它按预期运行了0个问题。

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.