Questions tagged «shell-script»

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

8
如何配置Mutt以在传呼机的本地时区中显示日期标头?
当我在寻呼机中查看消息时,杂音将在UTC的Date标头中显示时间,而不是本地时区。索引视图正确显示本地时间。我发现这条旧的邮件列表帖子描述了如何获取本地时间以显示在屏幕底部的状态栏中,但这仍然不能“固定”时间在屏幕顶部的Date标头中。有什么方法可以使寻呼机将Date标头时间转换为本地时间?

7
为什么会出现“第1行:$':\ r':命令未找到”?
我在笔记本电脑(DOS)上使用了Cygwin。我从同事和我的同事那里收集了一些脚本。我不是IT人员,也不了解Unix。我遵循同事的语法,能够处理一些简单的事情。 这些脚本在我的旧笔记本电脑上运行良好。我刚换了笔记本电脑,安装了Cygwin。当我运行脚本时,它们不起作用。这是我收到的错误消息的一个示例: line 1: $':\r': command not found line 5: syntax error near unexpected token `$'\r'' line 5: `fi 这是我脚本的前5行 : iter=1 if [ -f iter.txt ] then rm ./iter.txt fi 有人可以解释一下如何解决这个问题吗?

4
如果没有给出命令,如何解析bash脚本中的可选参数?
当为以下程序编写bash脚本时,我很困惑如何包括可选参数/标志: 该程序需要两个参数: run_program --flag1 <value> --flag2 <value> 但是,有几个可选标志: run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value> 我想运行bash脚本,使其接受用户参数。如果用户仅按顺序输入两个参数,则为: #!/bin/sh run_program --flag1 $1 --flag2 $2 但是,如果包含任何可选参数怎么办?我认为那是 if [ --optflag1 "$3" ]; then run_program --flag1 $1 --flag2 $2 --optflag1 $3 fi 但是,如果给出4美元而不给出3美元怎么办?

2
Bash脚本在函数中本地回显
在bash脚本中,我尝试将变量尽可能地局部化,然后将需要的内容从波纹管中传递出去 #!/bin/bash function FUNCTION() { local LOCAL="value" echo "$LOCAL" # return this variable } GLOBAL=$(FUNCTION) echo "$GLOBAL" 但是有可能在包含函数自己的回显的同时执行此操作,因此,如果函数具有自己的消息要输出,则不必将它们捕获在变量中 #!/bin/bash function FUNCTION() { local LOCAL="value" echo "$LOCAL" # return this variable echo "This function is done now" # do not return this variable } GLOBAL=$(FUNCTION) echo "$GLOBAL" # should only echo …

3
如何在CentOS 7中双击启动Shell脚本
我需要能够sh双击执行一个可执行的Shell脚本()。我在文件的权限上设置了可执行标志,但是当我双击它时,它将在文本编辑器中打开。我的文件属性菜单下的用户界面中没有任何选项可以使用自定义命令或其他任何命令。它仅列出已安装的各种应用程序。我只希望它执行,仅此而已。我该怎么做?

4
将JSON数组中的一个字段解析为bash数组
我有一个JSON输出,其中包含存储在变量中的对象列表。(我可能没有这样说的权利) [ { "item1": "value1", "item2": "value2", "sub items": [ { "subitem": "subvalue" } ] }, { "item1": "value1_2", "item2": "value2_2", "sub items_2": [ { "subitem_2": "subvalue_2" } ] } ] 我需要数组中的item2的所有值,以便bash脚本在ubuntu 14.04.1。上运行。 我发现了很多方法可以将整个结果放入数组,而不仅仅是我需要的项目

4
确定为OpenSSH RemoteForward动态分配的端口
问题(TL; DR) 动态分配端口以进行远程转发(aka -R选项)时,远程计算机上的脚本(例如来自的源.bashrc)如何确定OpenSSH选择了哪些端口? 背景 我使用OpenSSH(在两端)连接到我们与多个其他用户共享的中央服务器。对于远程会话(暂时而言),我想转发X,cups和pulseaudio。 最简单的是使用-X选项转发X。分配的X地址存储在环境变量中DISPLAY,从此我可以在大多数情况下确定相应的TCP端口。但是我几乎不需要,因为Xlib非常荣幸DISPLAY。 我需要类似的机制来制作杯子和Pulseaudio。两种服务的基础都以环境变量CUPS_SERVER和的形式存在PULSE_SERVER。以下是用法示例: ssh -X -R12345:localhost:631 -R54321:localhost:4713 datserver export CUPS_SERVER=localhost:12345 lowriter #and I can print using my local printer lpr -P default -o Duplex=DuplexNoTumble minutes.pdf #printing through the tunnel lpr -H localhost:631 -P default -o Duplex=DuplexNoTumble minutes.pdf #printing remotely mpg123 mp3s/van_halen/jump.mp3 #annoy co-workers PULSE_SERVER=localhost:54321 mpg123 …

1
IFS null是否与未设置IFS相同?
我在这里阅读了一个名为“ 了解IFS”的问题。我很惊讶,因为答案和注释都引用了POSIX,其中指出IFS =与取消设置IFS不同。如果取消设置IFS,则显然使用默认值。如果将IFS设置为null,则没有拆分器。我知道我对此有不同的看法,我在书签中发现了这一点: Bourne Shell编程 $ IFS 脚本中的第一个语句应该是 IFS = 将输入字段分隔符重置为其默认值。否则,您将从用户那里继承$ IFS,该用户可能已将其设置为一些奇怪的值,以便使sh解析字符串的方式与您期望的方式不同,并引起怪异的行为。 那么前段时间是真的还是作者错了?

2
Shell脚本:在其中使用sudo与在sudo中运行它?
在编写shell脚本时,其中的某些命令(而非全部)需要超级用户特权,我应该 将sudo添加到需要超级用户特权的命令中,并在不使用sudo的情况下运行shell脚本,或者 不要在需要超级用户权限的命令中添加sudo,而是使用sudo运行shell脚本? 第二种方式,我只需要提供一次密码,但是脚本中的所有命令都将以超级用户权限运行,包括那些不需要的命令。 第一种方式,我可能需要为不同的sudo命令多次提供密码,而超级用户特权仅授予那些需要它们的命令。 从安全性考虑,第一种方法更好。为了方便起见,第二种方法更好。 我一直在考虑采用第一种方法。因此,我不得不处理在shell脚本中为多个sudo命令提供密码的不便之处。 斯蒂芬·哈里斯(Stephen Harris)写道: 编写良好的脚本会检测它是否以正确的权限运行,而根本不会调用sudo,但是有很多错误的脚本 那我应该用第二种方式吗?如果是这样的话, 我怎么写“脚本将检测它是否以正确的权限运行,而根本不调用sudo”? 我如何提高其安全性,以避免在使用sudo运行脚本时为不需要超级用户的命令赋予超级用户特权的问题? 这种简单的方法是否能兼具这两种方法的优点:将sudo添加到只需要它的命令中,然后根据需要的方便性或安全性运行带有或不带有sudo的脚本?这种方法有问题吗? 谢谢。

3
回显或打印/ dev / stdin / dev / stdout / dev / stderr
我想打印/ dev / stdin,/ dev / stdout和/ dev / stderr的值。 这是我的简单脚本: #!/bin/bash echo your stdin is : $(</dev/stdin) echo your stdout is : $(</dev/stdout) echo your stderr is : $(</dev/stderr) 我使用以下管道: [root@localhost home]# ls | ./myscript.sh [root@localhost home]# testerr | ./myscript.sh $(</dev/stdin)似乎只起作用,我还在人们使用的其他一些问题上发现:"${1-/dev/stdin}"尝试失败。

1
systemd在步骤EXEC生成脚本时失败:权限被拒绝
可以这么说,我正在尝试创建“ Hello World”服务。称为autologger.service,存储在/usr/lib/systemd/system/autologger.service。 我尝试过sudo service autologger start,但systemctl返回了标准: Job for autologger.service failed. See 'systemctl status autologger.service' and 'journalctl -xn' for details. 当我检查时/var/log/messages,看到以下错误消息: Failed at step EXEC spawning /opt/autologger/placeholder.sh: Permission denied 我的问题是:如何授予任何服务权限? 这是服务单元文件: [Unit] Description=Hello World DefaultDependencies=no Before=shutdown.target reboot.target halt.target [Service] Type=oneshot ExecStart=/opt/autologger/placeholder.sh placeholder.sh仅包含 #!/bin/bash echo "Hello World"

7
bash遍历字符串列表
是否可以格式化此样本: for i in string1 string2 stringN do echo $i done 类似于以下内容: for i in string1 string2 stringN do echo $i done 编辑:对不起,混乱,并没有意识到,有执行脚本的不同方法-上海<scriptname>与bash <scriptname>和也这件事情,我现在不能名字- #!/bin/sh和#!/bin/bash:)

4
如何在bash脚本中包含python脚本
我需要在bash脚本中包括以下python脚本。 如果bash脚本成功结束,则需要执行以下脚本: #!/usr/bin/python from smtplib import SMTP import datetime debuglevel = 0 smtp = SMTP() smtp.set_debuglevel(debuglevel) smtp.connect('192.168.75.1', 25) smtp.login('my_mail', 'mail_passwd') from_addr = "My Name <my_mail@192.168.75.1>" to_addr = "<my_mail@192.168.75.1" subj = "Process completed" date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" ) #print (date) message_text = "Hai..\n\nThe process completed." msg = "From: %s\nTo: %s\nSubject: …

2
在Bash中参数化对应用程序的链接调用
我在Bash shell中使用了一个黑匣子UNIX程序,该程序从stdin读取数据列,对其进行处理(应用平滑效果),然后输出到stdout。我通过UNIX管道使用它,例如 generate | smooth | plot 为了更加平滑,我可以重复进行平滑操作,因此可以从Bash命令行中调用它,如下所示: generate | smooth | smooth | plot 甚至 generate | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | plot 这变得越来越古怪。我想制作一个Bash包装器,使其能够通过管道传递smooth并将其输出直接反馈到smooth任意次数的新实例中,例如 generate | newsmooth 5 | plot 代替 generate | smooth …

4
为什么不对||使用多个命令 或&&有条件的工作?
这适用于shell(重击,破折号)提示: [ -z "" ] && echo A || echo B A 但是,我试图编写一个POSIX shell脚本,它的开始是这样的: #!/bin/sh [ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; exit 1 readonly raw_input_string=${1} [ -z "${raw_input_string}" ] && echo "The given argument is empty."; exit 1 而且我不知道为什么,但是我没有得到消息: 给定的参数为空。 如果我这样调用脚本: ./test_empty_argument "" …

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.