次の2つのコマンドを連続して実行するエイリアスを定義したいと思います。
gnome-screensaver
gnome-screensaver-command --lock
今、私は追加しました
alias lock='gnome-screensaver-command --lock'
.bashrcにアクセスしますが、ワークステーションを頻繁にロックするため、1つのコマンドを入力する方が簡単です。
試してください:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
または
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
あなたの.bashrc
2番目の解決策では、引数を使用できます。
エイリアスは、エイリアスコマンド名用です。それ以上のことは、関数で行う必要があります。
alias ll='ls -l' # The ll command is an alias for ls -l
エイリアスは、元の名前にまだ関連付けられている名前です。 ll
は、わずかに特定の種類のls
です。
d() {
if exists colordiff; then
colordiff -ur "$@"
Elif exists diff; then
diff -ur "$@"
Elif exists comm; then
comm -3 "$1" "$2"
fi | less
}
関数は、内部ロジックを持つ新しいコマンドです。これは、単に別のコマンドの名前を変更するだけではありません。内部操作を行います。
技術的には、Bashシェル言語のエイリアスは機能が非常に制限されているため、単一のコマンド以上を含むものには非常に適していません。それらを使用して、単一のコマンドの小さな突然変異を作成します。
意図は、他のコマンドで内部的に解決する操作を実行する新しいコマンドを作成することなので、正しい答えはここで関数を使用することだけです:
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
このようなシナリオでエイリアスを使用すると、多くの問題が発生します。コマンドとして実行される関数とは異なり、エイリアスは現在のコマンドに展開されるため、このエイリアス「コマンド」を他のコマンドと組み合わせると、非常に予期しない問題が発生します。また、スクリプトでは機能しません。
これは機能しませんか?
alias whatever='gnome-screensaver ; gnome-screensaver-command --lock'
これにより、2つのコマンドが次々に実行されます。
alias lock='gnome-screensaver ; gnome-screensaver-command --lock'
したがって、セミコロンを使用します。
alias lock='gnome-screensaver; gnome-screen-saver-command --lock'
最初のコマンドに引数を指定する場合、これはうまく機能しません。または、$ HOME/binディレクトリに簡単なスクリプトを作成します。
2番目の@mouvicielアプローチ。次のコマンドを使用すると、単純なコマンドで非常にうまく機能します。
alias doSomething='command1; command2'
引数を必要とするコマンドには、関数を使用するだけです:
doSomething() {
command1
command2 --lock
}