标签: bash

如何查找当前目录下的所有软链接(符号链接)?

问题与 .shell 脚本有关bash

如何使用脚本检查当前目录中的哪些文件是软链接?

如果我使用了错误的术语,当我说soft links 时,我指的是使用ln -s.

我唯一能想到的是ls -la作为一个表达式进行评估,并解析它的结果,但这显然不是最好的解决方案。

bash symbolic-link ls ln shell-script

10
推荐指数
2
解决办法
3万
查看次数

Gnome:从 bash 命令行更改当前终端的标题

我知道有一些选项可以使用指定的标题启动新终端,并且可以使用菜单从终端更改标题:“终端”-> 设置标题。

但是,我想从命令行为当前终端更改它。如何从命令行更改现有Gnome 终端的标题?

gnome bash gnome-terminal ubuntu-11.04

10
推荐指数
1
解决办法
1万
查看次数

bash 函数中的别名作用域

我使用一个脚本(我没有写访问权限)来创建一堆别名来设置环境。我想创建一个 bash 函数来设置我的环境,但似乎别名在函数体中不存在。

这是一个最小的例子:

# aliases.sh
alias fooAlias='echo "this will never work!"'  
Run Code Online (Sandbox Code Playgroud)

.

# .bashrc
function setupLotsOfThings() {
    source aliases.sh
    fooAlias
}
Run Code Online (Sandbox Code Playgroud)

.

现在,如果我只是以aliases.sh交互方式获取源代码,那么事情会按预期进行:

[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
Run Code Online (Sandbox Code Playgroud)

但是,如果我改为调用 .bashrc 中定义的函数,则在获取其定义后它无法识别别名:

[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?alias在函数中使用时,我对命令的范围有什么遗漏吗?

编辑:我将添加一些超出最小示例的细节,以阐明我正在尝试完成的工作。

对于我的工作,我在集群和/或网格上开发和运行了很多软件。我有几个项目需要完全不同的环境,例如不同的 gcc 版本、特定的软件版本、配置和数据路径以及各种环境变量。管理员提供脚本来设置各种东西,通常是通过定义 shell 函数或别名来调用其他函数或别名或运行各种脚本。对我来说,这是一个黑匣子。

我想用一个命令设置我自己的各种环境。目前,我做这样的事情:

[mycomputer]~/ $ source /some/environment/setup/script.sh
[mycomputer]~/ $ aliasToSetupSomeSoftwareVersion    #this was defined in the above
[mycomputer]~/ $ anotherAliasForOtherSoftware
[mycomputer]~/ $ source /maybe/theres/another/script.sh
[mycomputer]~/ …
Run Code Online (Sandbox Code Playgroud)

bash

10
推荐指数
2
解决办法
5667
查看次数

如何从单个 bash 脚本启动多个屏幕会话?

我写了一个看起来像这样的脚本(不起作用):

#!/bin/sh

screen -dmS "somename" somecommand

for i in {0..5}; do
    screen -dmS "name$i" anothercommand $i
done
Run Code Online (Sandbox Code Playgroud)

出于某种原因,如果我将其复制并粘贴到终端中,它会按照我的预期创建 7 个分离的屏幕会话。但是,如果我从脚本中运行它,当我运行screen -ls.

编辑:如果可以通过另一种方式完成相同的操作(例如,使用多个屏幕窗口而不是会话),我也会打开这些解决方案。谢谢!

linux script bash gnu-screen

9
推荐指数
1
解决办法
2万
查看次数

在 bash 脚本中运行 python oneliner

以下是我想作为 bash 脚本的一部分运行的 python one-liner

python -c "from xml.dom.minidom import parse;dom = parse('/path/to/pom.xml');print [n.firstChild.data for n in dom.childNodes[0].childNodes if n.firstChild and n.tagName == 'version']"
Run Code Online (Sandbox Code Playgroud)

(pom.xml 是一个 maven POM xml 文件)

我想将命令的结果分配给变量MVN_VER

这是我的基本脚本:

WS="/path/to"
PY_GET_MVN_VERS="from xml.dom.minidom import parse;dom = parse(\'${WS}/pom.xml\')\;print [n.firstChild.data for n in dom.childNodes[0].childNodes if n.firstChild and n.tagName == \'version\']"

funcion test_mvn {

        MVN_VER=`python -c \"${PY_GET_MVN_VERS}\"`
        echo ${MVN_VERS}
}

test_mvn
Run Code Online (Sandbox Code Playgroud)

但是它无法运行。如果我使用 +x 选项运行脚本,我会看到:

++ python -c '"from' xml.dom.minidom import 'parse;dom' = 'parse(\'\''/path/to/pom.xml\'\'')\;print' '[n.firstChild.data' for n in 'dom.childNodes[0].childNodes' if n.firstChild …
Run Code Online (Sandbox Code Playgroud)

bash

9
推荐指数
1
解决办法
2万
查看次数

使用 msysgit/"Git for Windows" 导航 Windows 快捷方式?

我在 Windows 上使用 msysgit 来使用 git,但我经常想通过 Windows 风格的*.lnk快捷方式进行导航。我通常通过 Windows 的资源管理器管理我的文件结构,因此使用不同类型的快捷方式(例如在 git 中创建硬链接或软链接)是不可行的。我将如何浏览这种类型的快捷方式?

例如:

PCUser@PCName ~
$ cd Desktop

PCUser@PCName ~/Desktop
$ ls
Scripts.lnk

PCUser@PCName ~/Desktop
$ cd Scripts.lnk
sh.exe": cd: Scripts.lnk: Not a directory
Run Code Online (Sandbox Code Playgroud)

是否可以更改此行为,以便它不会出错,而只会转到目录的位置?或者,是否有获取*.lnk文件路径的命令?

编辑:我听说cygwin存在相反的情况,允许您创建一个与资源管理器一起使用的符号链接。

windows bash msysgit

9
推荐指数
1
解决办法
2533
查看次数

“ls”显示挂载的 NFS 文件夹中没有文件,但“cd”有效

NFS 共享已挂载到/vol/mynfsLinux 客户端。它不显示任何文件夹,ls并且 bash 完成也不起作用/vol/mynfs。但是在更改到子目录后,所有文件都可见。

$ ls /vol/mynfs
total 0
$ cd /vol/mynfs/test
$ ls  # shows all files as expected now.
Run Code Online (Sandbox Code Playgroud)

为什么文件首先不可见,如何使它们始终可见?

linux mount bash nfs

9
推荐指数
1
解决办法
2万
查看次数

无法连接视频 ffmpeg

我有一个位图,我想将它连接到许多视频的前面,作为一种标题屏幕或免责声明屏幕。

我尝试将其转换为与视频其余部分具有相同属性的视频。所以首先我反省视频:

ffmpeg version 2.2.1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr 11 2014 22:50:38 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 66.100 / 52. 66.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  2.100 /  4.  2.100
  libavresample   1.  2.  0 /  1. …
Run Code Online (Sandbox Code Playgroud)

video bash ffmpeg mpeg concatenation

9
推荐指数
1
解决办法
756
查看次数

使用 sudo 运行时如何重定向 OS X dtruss 输出?

dtruss在 Mac OS X 10.9 上运行。简单的例子是:

sudo -c ls
Run Code Online (Sandbox Code Playgroud)

但我想将dtruss输出捕获到一个文件中。我看到一些东西表明我可以做这样的事情:

sudo bash -c 'dtruss -c ls >x'
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,输出dtruss仍然会进入终端,并且来自的文件列表ls被重定向到该文件。

如何将输出重定向dtruss到文件?

sudo bash redirection macos

9
推荐指数
1
解决办法
4628
查看次数

使用 mktemp --dry-run 时我应该担心什么

我一直在尝试创建一个临时命名的 fifo 并在引用Bash: create anonymous fifo我看到他们正在使用mktemp -u来获取 fifo 的文件名。手册页指出这是不安全的。

-u, --dry-run
       do not create anything; merely print a name (unsafe)
Run Code Online (Sandbox Code Playgroud)

为什么这是不安全的,我如何负责任地使用这种技术?

bash

9
推荐指数
1
解决办法
1860
查看次数