質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

4回答

1681閲覧

sshログイン後に自作のaliasコマンドが実行されない

fy_2000

総合スコア20

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2018/07/30 06:50

編集2018/07/31 04:41

sshでログインした後にコマンドを実行する方法は

ssh -X -t サーバー名 ログイン後に実行したいコマンド

というように-tコマンドをつけるか

ssh -X サーバー名 ”ログイン後に実行したいコマンド”

のように””で囲む2通りがあることを調べて確認しました。
しかし、この方法では例えばcdのようなコマンドであれば実行できることは確認できたのですが、自分で作成したaliasのコマンドは実行できませんでした。
もちろん、通常通りsshでログインした後にaliasの実行はできます。

なぜ、aliasのコマンドを実行できないのか、わからないのですが、解決方法をご存知の方がいらっしゃいましたらご教授ください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/07/30 07:01

実際にどう入力して実行したのか、その時のレスポンスはどうなったのか、を提示してくれますか
fy_2000

2018/07/30 07:08 編集

bash: py35: コマンドが見つかりません と表示されます。
fy_2000

2018/07/30 07:07

入力は質問に書いたようなもので、コマンド(py35)は自分がssh先で設定しているaliasです。
otn

2018/07/30 12:02

-X を付けている意図は何でしょうか?
fy_2000

2018/07/31 01:04

特に意味はありませんが、sshログインした後に-Xのオプションが必要な操作をする予定のため、つけています。
guest

回答4

0

man bashより:

シェルが対話的でないときには、 shopt コマンドによって expand_aliases オ
プションが設定されていない場合に限り、エイリアスの展開は行われません

投稿2018/07/30 12:14

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fy_2000

2018/07/31 01:17 編集

回答頂き、ありがとうございます。 シェルについて詳しくないのですが、expand_aliasesなるオプションが設定されていないためにaliasが効かないということでしょうか。
fy_2000

2018/07/31 01:17 編集

確認しましたところ、expand_aliases onとなっておりました。
otn

2018/07/31 01:33

> 確認しましたところ、expand_aliases onとなっておりました。 確認方法が悪いのでは? ちゃんと、 ssh ホスト名 shopt と実行しましたか?
otn

2018/07/31 01:38

シェル関数は実行できるようなので、aliasでなくシェル関数にすると良いと思います。
fy_2000

2018/07/31 02:01

ありがとうございます。 >ssh ホスト名 shopt としておりませんでした。 どうすればonにできるのでしょうか。 (最初はsshで入った後ならshopt -s expand_aliasesでonにできるというのは別サイトで確認したのですが、どうすればsshの場合にもそれができるのでしょうか。)
otn

2018/07/31 02:07

> としておりませんでした。 alias展開される環境で確認したらonになっていて当然です。 > どうすればsshの場合にもそれができるのでしょうか できなさげです。 シェル関数にしましょう。
fy_2000

2018/07/31 02:16

わかりました。やってみます。 いろいろと教えていただき、ありがとうございます。
otn

2018/07/31 02:20 編集

alias foo="ls -ltr" ↓ foo() { ls -ltr $* ; } こんな感じです。
fy_2000

2018/07/31 04:33

ありがとうございます。 助かりました。
fy_2000

2018/07/31 04:48

何度もすみません。 教えていただいた方法でおきかえてやってみたのですが、うまくいきませんでした。 ssh -X -t サーバー名 ssh内aliasコマンド というのを実行したかったのですが、ssh内のaliasコマンドはanacondaの環境にはいるためのものでalias py35="source activate py35"としていたのですが、 以下のように実行してみると、 ssh -X -t サーバー名 py35() {source activate py35 $*;} bash: -c: 行 0: 予期しないトークン `{source' 周辺に構文エラーがあります bash: -c: 行 0: `py35() {source activate py35 ;}' Connection to bgate closed. のような表示が出てしまいました。 何が問題なのでしょうか?
fy_2000

2018/07/31 04:49

bashrcにこのように書かないといけないのでしょうか。理解力がなくてすみません。
otn

2018/07/31 04:54

先に書いたのは関数定義の方法です。 .bashrcにpy35="source activate py35"と書いてあったのであれば、その代わりに py35() {source activate py35;} と書きます。実行時にpy35の後ろに引数を書かないのであれば、$* は不要。 その状態で、ssh -X -t サーバー名 py35 です。
fy_2000

2018/07/31 04:59 編集

なるほど、ありがとうございます。 py35() {source activate py35;}を.bashrcに代わりに記入し、 . .bashrcとしたのですが、 -bash: .bashrc: 行 131: 予期しないトークン `)' 周辺に構文エラーがあります -bash: .bashrc: 行 131: `py35() {source activate py35;}' と表示がでています。
otn

2018/07/31 05:06

よく見ると"{"の後に空白がないですね。 py35() { source activate py35; } ただ、エラーメッセージが合わないので、周辺含めてよく見直してください。
fy_2000

2018/07/31 05:15

py35 の前に functionをつけるとaliasは動きました。 しかしssh -X -t サーバー名 py35は動きませんでした。 bash: py35: コマンドが見つかりません と表示されています。
otn

2018/07/31 05:35

OSやBashバージョンによる違いかも知れません。 CentOS6 Bash4.1.2では動きます。
fy_2000

2018/07/31 05:55

こちらはUbuntu 16.04です。どうやらその違いがでているようです。 お力添えをいただき、ありがとうございます。
otn

2018/07/31 06:32

Linuxじゃないのかと思いましたが、Linuxですか。うーむ。
guest

0

bash: py35: コマンドが見つかりません と表示されます。

書かれているとおり、コマンドとしては認識されていない、ということでしょうね。

投稿2018/07/30 07:11

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fy_2000

2018/07/31 01:12

回答頂き、ありがとうございます。 コマンドとは認識されていないのですね。なぜ、sshログインしたときはaliasが効かなくなるのでしょうか。
guest

0

aliasではなく、元のコマンドssh先の.bashrcに記入することで対応しました。
aliasをログイン時に自動実行することには成功していません。

投稿2020/08/15 09:02

fy_2000

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ssh で直接コマンドを実行する場合、ログインしている状況といろいろ異なる環境になっており、

  • tty がない
  • ログインシェルとして実行されない。

などがあったと思います。

ところで、alias の設定は、どこに書いてあるのでしょうか?
alias の内容をシェルスクリプトにすると問題なく動作しますか?

投稿2018/07/30 07:43

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fy_2000

2018/07/31 01:11

回答頂き、ありがとうございます。 >alias の設定は、どこに書いてあるのでしょうか? これは自分のユーザーの.bashrcに書いてあります。 >alias の内容をシェルスクリプトにすると問題なく動作しますか? 実行した結果、以下のような反応が得られました。 ``` sh test.sh test.sh: 1: test.sh: py35: not found ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問