![如何将别名作为参数传递给 shell 命令](https://linux22.com/image/167405/%E5%A6%82%E4%BD%95%E5%B0%86%E5%88%AB%E5%90%8D%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E7%BB%99%20shell%20%E5%91%BD%E4%BB%A4.png)
我有一个像这样设置的别名。
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 参数确实会产生一些安全隐患。