我有一个像这样设置的别名。
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 参数确实会产生一些安全隐患。