2013-03-05 141 views
-1

通常,我发现使用bash命令与其他(即复合命令)或变量相当混淆。没有任何事情按我期望的方式工作。命令期望各种各样的输入类型(例如echo在查找时需要一个字符串),并且有许多方法可以将信息从一个命令传输到另一个命令(例如xargs,piping,here-strings(<<<)和命令扩展($(command)) )。当彼此使用命令时,我不确定将信息从一个命令传递到另一个命令的正确方式,因此它可以像我期望的那样工作。在bash命令中的输入类型之间进行转换

一些例子:如果我做echo $VAR,它期望变量是一个字符串。如果我做grep pattern $VAR,它会期望我的变量是一个路径名,而不是一个字符串。为了让grep把它看作一个字符串,我必须做echo $VAR | grep pattern。所以,为了获得相同的期望阅读,我必须针对不同的命令以不同的方式输入我的信息。

另一个例子:我最近想在我的$PATH中搜索命令。我花了很长时间的试验和错误,发现我可以使用ls $(sed 's/:/ /g' <<< "$PATH") | grep searchstring这样做。由于我无法将参数传入ls,看起来grep可以从stdin读取参数,而ls不能?

具体而言,一些问题我想回答是:

  1. 我怎么知道是什么命令期待什么类型的输入?
  2. 命令(或短语)之间传递信息的不同方法之间的有效和语义差异是什么?
  3. 重定向的输入和输出可以在这里有用吗?
  4. 怎样类型的输入之间切换(例如,如果它是期待一个 文件名,但我想给它,而不是字符串)
  5. 什么是我的复合命令将被解析的规则?
  6. 奖励:在上述方法的哪里和怎样可以使用bash扩展等(例如,我可以在管道信息中bash扩展)?

回答

2

不是很讨厌,但是你必须在阅读和放置一些时间来学习命令。你写错的代码越多,然后修复得越多。

这里有很多bash教程。去一个,开始黑客攻击。没有什么魔法可以用来学习UNIX命令和bash。就像Windows一样,你必须使用接口和命令。

+0

所以你说这个问题的范围太大了?根据你的建议,我只是花了一点时间阅读,我不确定是如此......到目前为止,我认为我的大部分难题都可以通过分解不同的函数链接方法来解决。 .. – ari 2013-03-05 06:20:07

1

如何知道哪些命令需要输入哪种类型的输入?

如果你看一个命令的手册页,你可以看到什么参数是预期的,如果该命令读取标准输入等。

在命令(或短语)之间传递信息的不同方法之间的有效和语义差异是什么?

这取决于命令和情况。有时你可以选择在文件中提供一些文本或通过标准输入(例如,grep -f),这是你的电话。

重定向的输入和输出可以在这里有用吗?

我怎样类型的输入之间切换(例如,如果它是期待一个文件名,但我想给它一个字符串代替)

从字符串到标准输入,你做echo $string,其他方式使用xargs

我的复合命令将被解析的规则是什么?

不是一个明确的问题国际海事组织,有规则强制执行命令本身和一些偏好,由于目前的问题。

奖励:上述方法中的哪些地方和方式可以使用bash扩展等(例如,我可以在信息管道之后扩展)?

你可以用bash做任何事情:)但是对管道输入的扩展需要一些eval和花哨的东西。

相关问题