如何将别名作为参数传递给 shell 命令

如何将别名作为参数传递给 shell 命令

我有一个像这样设置的别名。

alias X='`xclip -o --selection primary`'

现在,如果我只想回显我的剪贴板值,这非常有用。但我真的很希望能够将它用作其他命令的参数。

ssh X

我也尝试过将其作为一个函数,但似乎也不起作用。我想我可以将它存储为字符串并执行,ssh $(X) 但我宁愿避免任何类似的语法。

从我到目前为止所注意到的来看,参数似乎根本没有被扩展,它似乎只有在输入的第一件事时才起作用。

我的意思是我知道可以,alias X="ssh xclip..."但我希望它适用于每个命令,而不仅仅是 ssh。

所以我想问题是当它是命令参数时如何扩展单个字母?

答案1

您可以使用一个棘手的小解决方法来链接别名,尽管您需要首先定义您希望能够在别名中使用它的命令。

它可能并不广为人知,但如果你有像我这样的东西:

alias chx='chmod +x'

然后尝试运行sudo chx你会得到sudo: chx: command not found

然而。 如果您提供

alias sudo='sudo '
alias chx='chmod +x'

现在,您可以使用sudo此(以及任何其他)别名,只要其他别名是第一个参数。


这可以应用于您最常想要使用此剪贴板的程序。为了使您提供的示例正常工作,例如:

alias ssh='ssh '
alias X='`xclip -o --selection primary`'

答案2

ssh `X` 

应该做你所期望的它将执行别名 X 并将其输出作为输入参数传递给 ssh (或其他命令)

此外,您还可以使用

X | xargs ssh 

这将完成同样的任务

答案3

任何命令的输出都可以通过“反引号”或“重音符号”放在另一个命令的任何位置(通常作为参数)。这就是你要问的吗?

[user@domain]$ alias X='ls'
[user@domain]$ X
file1 file2 file3
[user@domain]$ echo X
X
[user@domain]$ echo `X`
file1 file2 file3

我不确定这是否是你的问题的意思,但这就是我的读法。别名(这是一个命令)的输出将被粘贴到新的命令字符串中(在您的示例中调用 ssh)。请注意,将剪贴板发送到 ssh 参数确实会产生一些安全隐患。

相关内容