0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【zsh】aliasを使ってpwdにクリップボードにコピーする機能を追加&クリップボードのパスにcdするコマンドを作成した

Posted at

きっかけ・やりたいこと

  • 複数のシェルを扱うとき、一方のシェルのカレントディレクトリに他方のシェルでcdしたい事が多かった
  • ↓↓↓みたいなことをしたい
  1. 一方のシェルでいい感じのコマンドを打つ
  2. クリップボードにパスがコピーされる
  3. 他方のシェルでいい感じのコマンドを打つ
  4. クリップボードのパスにcdしてくれる
  • ついでにホームディレクトリは~で表示されてほしい。↑↑↑の用途なら不要だけど、普通にカレントディレクトリを他のソースコードとかに打ったりするときにそうであってほしいから。
  • pwdの結果をクリップボードにコピーするワンライナーを作ってaliasに登録すれば解決やん!→作るか〜
  • クリップボードのパスをcdにぶちこむワンライナーを作ってaliasに登録すれば解決やん!→作るか〜

結果

~/.zshrc
# pwdついでにパスをクリップボードにコピー
alias p='pwd | tr -d '\n' | sed "s;$HOME;~;g" | pbcopy ; echo "$(pbpaste)" ' 

# クリップボードのパスに移動
alias cdp='cd "$(pbpaste | sed "s;~;$HOME;g")"'

解説

前提: クリップボード関連のコマンド

/bin/zsh
# pbcopy: クリップボードにコピー
$ echo "abc" | pbcopy

# pbpaste: クリップボードから貼り付け
$ pbpaste
abc

pwdのほう

pwdの結果をパイプラインで加工加工。んでコピー。

tr -d '\n' で末尾の改行を削除。
sed "s;$HOME;~;g" でホームディレクトリ部分$HOMEが含まれていれば~に置換している。

最後の; echo "$(pbpaste)"だが、pwdの(標準)出力が全部tr→sed→pbcopyに食べられちゃうので、pwdの結果を表示するために追加している。
echoの引数を$(pbpaste)にするとpbpasteの状態によって変な挙動をするので、ちゃんとダブルクォーテーションをつけよう!

cdのほう

実はcdとかいうやつ、標準入力を完全に無視する!!(なんでや)
$ echo "/bin" | cd とか $ pbpaste | cdみたいにしても思うようになってはくれない。

代わりに $ cd "$( pbpaste )" を使う必要がある。

あと何故か~入りのままだとうまく動いてくれなかったので、sed "s;~;$HOME;g" を噛ませて展開している。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?