Questions tagged «shell»

Shell是Unix的命令行界面。您可以交互地在外壳程序中键入命令,也可以编写脚本来自动执行任务。使用此标记可解决适用于/ bin / sh和大多数兼容shell(ash,bash,ksh,zsh等)的问题。对于有错误的Shell脚本,请在此处发布之前在http://shellcheck.net中对其进行检查。

1
泄漏文件描述符
如果文件描述符泄漏是什么意思 File descriptor 6 (socket:[901758]) leaked on lvextend invocation. Parent PID 10035: /bin/zsh File descriptor 9 (/dev/pts/1) leaked on lvextend invocation. Parent PID 10035: /bin/zsh File descriptor 11 (/dev/pts/1) leaked on lvextend invocation. Parent PID 10035: /bin/zsh File descriptor 12 (/dev/pts/1) leaked on lvextend invocation. Parent PID 10035: /bin/zsh File …
13 shell  lvm 

2
根据用户或zsh中的root更改提示颜色
在zsh中,您可以%#在您的PS1(或任何PROMPT变量)中使用a,这基本上意味着%在用户情况下显示,#在root 用户情况下显示。我想知道是否有任何方法可以影响此效果,从而使%或#根据用户或根更改颜色(根为红色,用户为蓝色),显而易见的方法是更改PS1根中的,~/.zshrc但是考虑这已经是一个特殊的符号,我想知道是否可能没有办法PS1对两者都使用相同的东西…… %#zsh 特有的东西(我敢肯定,还有其他一些我也可以这样做的技巧) if语句)。
13 shell  zsh  colors  prompt 

3
您如何确定是否导出外壳变量?
对于Bourne shell家族,shell变量都具有大写的大小写名称;这意味着您不能仅通过查看其名称来判断特定变量是否为环境变量。您如何确定哪些Bourne shell变量是局部的(仅在当前shell中定义)?
13 bash  shell 

2
除Bash和Zsh之外的其他外壳程序是否支持ANSI-C引用?例如$'string'
我有一个shell脚本,该脚本使用以下命令在其输出中打印一个绿色的选中标记: col_green="\e[32;01m" col_reset="\e[39;49;00m" echo -e "Done ${col_green}✓${col_reset}" 在阅读了有关Bash的ANSI-C引用之后,我意识到我可以在设置颜色变量并-e从echo中删除标志时使用它。 col_green=$'\e[32;01m' col_reset=$'\e[39;49;00m' echo "Done ${col_green}✓${col_reset}" 这似乎很吸引人,因为它意味着无论将消息传递给Bash的内置echo还是外部util /bin/echo(我在macOS上),消息都能正确打印。 但这是否会使脚本的可移植性降低?我知道Bash和Zsh支持这种引用风格,但是我不确定其他人。

3
用mpv自动播放字幕
字幕文件有多种格式,从.srt到.sub再到.ass等等。有没有办法告诉mpv和媒体文件一起搜索字幕文件,以及是否确实开始自动播放文件。目前,我必须执行类似的操作,具体时间取决于文件名- [$] mpv --list-options | grep sub-file (null) requires an argument --sub-file String list (default: ) [file] 期待答案。 更新1-具有.srt(或下标)的典型电影 [$] mpv Winter.Sleep.\(Kis.Uykusu\).2014.720p.BrRip.2CH.x265.HEVC.Megablast.mkv (null) requires an argument Playing: Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.mkv (+) Video --vid=1 (*) (hevc) (+) Audio --aid=1 (aac) (+) Subs --sid=1 'Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.srt' (subrip) (external) [vo/opengl] Could not create EGL context! [sub] …


5
如何抑制来自cp的错误消息?
我目前正在寻找抑制Linux中错误命令的方法,尤其是command cp。 我做: root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory 如何抑制获取错误信息印在屏幕上?即,我不想在监视器中看到此错误消息。
13 shell  wildcards  cp 

2
如何获得控制终端的真实名称?
如何获得控制终端的真实名称(如果存在,否则为错误)作为路径名? 所谓“实名”,是指not /dev/tty,其他任意进程都不能使用它来指代同一终端。如果可能,我更倾向于将答案作为简单的shell代码(如下面的示例),否则作为C函数。 请注意,即使重定向了标准输入,此操作也必须起作用,以使该tty实用程序无法使用:not a tty在这种情况下,可能会出现错误,因为tty仅打印连接到标准输入的终端的文件名。 在Linux下,可以使用: echo "/dev/`ps -p $$ -o tty | tail -n 1`" 但这不是可移植的,因为根据POSIX,终端名称的格式未指定。 关于C函数,ctermid (NULL)return /dev/tty,在这里没有用。 注意:根据zsh文档,一个应该可以 zsh -c 'echo $TTY' 但是当同时重定向标准输入和标准输出时,当前(版本5.0.7)失败: $ zsh -c 'echo $TTY > /dev/tty' < /dev/null /dev/pts/9 $ zsh -c 'echo $TTY > /dev/tty' < /dev/null > /dev/null /dev/tty

5
我怎么能sudo su并立即更改目录?
我想创建一个执行以下操作的别名: alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access' 因此,然后从我的命令行,我登录与须藤用户,我想输入别名userYYY让我的壳现在登录同userYYY和pwd是/a/path/that/only/userYYY/has/access。 我怎样才能做到这一点?这userYYY是用于运行某些进程的,它的主目录中必须有任何东西。因此,我尝试使用以下方法更改其$ HOME: sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 然后从我的sudoer文件的外壳中执行操作sudo su userYYY。但这没有用。唯一有效的方法是,sudo su -l userYYYY但是在我的原始shell(-bash-4.1$ ....)中打开了一个新bash 。 总而言之,我要避免在shell中写两行代码: sudo su userYYY cd /a/path/that/only/userYYY/has/access 有任何想法吗?
13 bash  shell  sudo  su 

4
从文本文件中选择在另一个文件中列出ID的行
我在unix shell中使用了很多grep awk排序功能,以处理中等大小(大约10M-100M行)的制表符分隔的列文本文件。在这方面,unix shell是我的电子表格。 但是我有一个巨大的问题,那就是选择具有ID列表的记录。 如果table.csv文件的格式id\tfoo\tbar...和ids.csvID列表相同,请仅从table.csvID中存在的ID中选择记录ids.csv。 一种/programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-ids,但带有shell,而不是perl。 grep -F如果id为可变宽度,显然会产生误报。 join是我永远无法弄清楚的实用程序。首先,它需要按字母顺序排序(我的文件通常按数字排序),但是即使那样,我也无法在不抱怨顺序错误和跳过某些记录的情况下使它起作用。所以我不喜欢它。^id\t当id数量很大时,针对带有-s的文件的grep -f 非常慢。 awk麻烦 有什么好的解决方案吗?制表符分隔文件的任何特定工具?额外的功能也将是最受欢迎的。 UPD:已更正sort->join
13 shell  csv 

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

5
如何获取包含给定文件的文件系统的挂载点
我正在寻找一种快速的方法来查找包含给定FILE的文件系统的挂载点。有什么比下面的解决方案更简单或更直接的方法吗? df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' ' 类似的问题“ 是否有命令可以查看磁盘的安装位置? ”使用当前磁盘的设备节点作为输入,而不是磁盘中的任意文件...

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}"尝试失败。

3
如何将bash样式的数组移植到ash?
前段时间,我编写了一个bash脚本,现在该脚本应该可以在带有的环境中运行ash。 在bash它就像: services=( "service1.service" "service2.service" "service3.service" ) for service in "${services[@]}" do START $service done START() { echo "Starting "$1 systemctl start $1 } 实际上,有大约40种服务在阵列中,我想使这种过渡尽可能轻松,整洁。一直在使用bashisms。现在,我正忙于使脚本更具可移植性的任务。 出于可移植性的原因,最好有一个纯粹的ash解决方案。但是,由于我拥有足够强大的能力busybox,因此我可能会牺牲一些可移植性。只有在可读性得到很大提高的情况下,因为“干净”脚本也是一个度量标准。 什么是便携式和清洁在这种情况下的解决方案?
13 bash  shell  array  ash 

3
使用一个命令解压缩.txz和.tar中压缩的文件
我有一个在* .txz中压缩的文件。解压缩后,我收到了* .tar文件。有什么方法可以用一个命令将其解压缩两次?我的意思是用一个命令解压缩文件(* .tar).txz? 知道我是这样的: xz -d file.txz tar xvf file.tar 但我想知道是否有更好的方法。
13 shell  tar  compression 

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.