🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Q&A

解決済

3回答

2021閲覧

RCSのciコマンドの自動化について

Yoshitsugu12

総合スコア15

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

0グッド

2クリップ

投稿2021/01/18 06:35

編集2021/01/18 06:39

バージョン管理したいファイルを RCS に登録する、 ci コマンドの自動化についての質問です。

通常、ciコマンドをオプションなしで入力すると説明を求められるので、以下の作業が必要になります。
1.ファイルの目的や変更内容について記述する(>>のところ)。
2.入力を終えるには、新しい行で '.' (ピリオド) のみを入れて改行する。

%ci test.tex RCS/test.tex,v <-- test.tex enter description, terminated with single '.' or end of file: NOTE: This is NOT the log message! >> hajimete no RCS. >> . initial revision : 1.1 done

私は、この手動で記述する部分に変数を代入して何とか自動化したいと考えております。
ただし、制限がありましてyumのexpectなど外部からライブラリをインストールするのは無しです。

コマンド入力時点で説明を含めるなど何かうまい方法はないでしょうか。
※自分で調べましたがうまくいきませんでした。
よろしくお願いいたします。

環境
Cent OS 6.6

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

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

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

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

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

dodox86

2021/01/18 08:08

> ※自分で調べましたがうまくいきませんでした。 うまくいかなかったとは具体的にどういう方法でしょうか。回答したが「その方法ではうまくいかなかった。」と、行き違いがあることがよくありますので、質問者さんの方でうまくいかなかった方法を提示した方がよいです。
Yoshitsugu12

2021/01/18 09:01

わかりにくい言い回しで申し訳ありません ciコマンドのオプションに-mというものがあり、それで入力できるのではと試みていたためそのような1文を追加しておりました。 なお、上記のコマンドはログメッセージを入力するためのものだったようで見当違いのものでした。
guest

回答3

0

ベストアンサー

dodox86 さんのファイルに書いておくというのとほとんど同じですが、ファイル作成したくないなら

( echo "hoge" ; echo . ) | ci test.tex

または

echo . | ci -mhoge test.tex

などでいけるようですね。. の代わりに EOF でもいいようなのでパイプで渡す場合は . はあってもなくても OK のようです。

投稿2021/01/18 15:06

68user

総合スコア2022

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

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

Yoshitsugu12

2021/01/19 03:14

私の手法はファイルを作成しないやり方でしたので、こちらを利用させていただきます!! こんなechoコマンドの使い方もあるのですね 教えていただきありがとうございました!
guest

0

単に、. と Enter の入力を省略したいのであれば

bash

1ci test.tex < .

で、良いのでは?
後は、「<」以降を工夫するくらいかな?

上記は、FreeBSD 12.2 RELEASE より前の FreeBSD 上でしか 機能しないようです。
他の方の回答 が優れているかと思います。失礼いたしました。

投稿2021/01/18 10:33

編集2021/01/18 22:53
showkit

総合スコア1638

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

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

hidezzz

2021/01/18 10:41

このままだと、リダイレクトでカレントディレクトリ「.」を標準入力に与えるというあまり意味のない動作になってしまいませんか?
showkit

2021/01/18 12:02

このピリオドは カレントディレクトリの ピリオドでなく「新しい行で '.' (ピリオド) のみを入れて」に相当します。実際に コマンドで この通り実行して コミットしていることを 確認しています。
hidezzz

2021/01/18 12:29 編集

手元のマシン( Linux Mint 19.3 )にRCSを入れてbash上で実際に試してみましたが、標準入力にディレクトリを与えているというエラーが出ました。なんかこちらで見落としているところはありますか? $ ci test.tex < . test.tex,v <-- test.tex new revision: 1.2; previous revision: 1.1 ci: input error: Is a directory ci aborted
showkit

2021/01/18 13:06

ああ、失礼、RCS ディレクトリがないと そうなっちゃいましたね。回答を修正します。
showkit

2021/01/18 13:09

いや、違うな。RCS ディレクトリがなくても成功するときがありますね。もう少し調べます。
showkit

2021/01/18 13:15

ci したあと 連続で ci していませんか? その場合、ci の直後は ファイルがなくなっているので、メッセージが異なりますが、エラーになりますので、co するか ci そのものを ci -l test.tex < . するのがよいかと。 もしくは、もともと test.tex というディレクトリが存在したりしていませんか? 当初、tcsh でやっていたので、bash でもやってみましたが、うまくいきました。
hidezzz

2021/01/18 14:24 編集

もしかして…という確認ですけど、お使いのOSはFreeBSDの12.2よりも前のバージョンだったりしますか? だとしたら「< .」という入力リダイレクトでカレントディレクトリの内容がファイル扱いで標準入力に入るという話かもしれないと思いました。(FreeBSD 12.2以降はエラーとなるように修正?変更?されたようです。) FreeBSD-12.2ではディレクトリに対するread(2)がエラーとして扱われるようになった話 - Qiita https://qiita.com/furandon_pig/items/5bba9f1b04efb8596746
hidezzz

2021/01/18 14:21

test.texのある状態/ない状態にしたり、-lオプションをつけたりして、いろいろと「ci test.tex < .」を試してみましたがやはり標準入力にディレクトリを与えているというエラーが出ます。 1点確認ですが、「ci test.tex < .」のところを「ci test.tex < .test」としてもコマンドに成功しますか?(「.」をディレクトリとして認識しているのかテキストとして認識しているのかの確認です。)
showkit

2021/01/18 22:51

hidezzz ご指摘の通り、FreeBSD 11.4 RELEASE での操作でした。FreeBSD 12.2 RELEASE でやってみたら hidezzz さんのおっしゃる通りになりました。他の方の回答にすべきですね。失礼しました。 hidezzz ご指摘ありがとうございました。
Yoshitsugu12

2021/01/19 02:46

showkitさん、hidezzzさん お二方ともコメントいただきありがとうございました!
guest

0

1.ファイルの目的や変更内容について記述する(>>のところ)。
2.入力を終えるには、新しい行で '.' (ピリオド) のみを入れて改行する。

まずこの入力部分をひとつのファイルにします。例としてファイル名は「input.txt」とします。

terminal

1$ cat input.txt 2Hajimete no RCS. 3.

このファイルを標準入力にリダイレクトすれば、手入力ではなく、ファイルからの自動入力とすることができます。

terminal

1$ ci test1.txt < input.txt 2test1.txt,v <-- test1.txt 3initial revision: 1.1 4done

つまり、このファイルをあらかじめシェルスクリプトやawkperlpython、何でもいいですがそうしたもので作るようにしておけば、変数なども利用できるようになるということになります。

この標準入力をリダイレクトする手法はciコマンドに限らず、標準入力で対話入力するコマンドであれば同様に使えるので、覚えておくと便利です。※パスワードやPINの入力などをする一部のプログラムでは標準入力を使わないようなものもあるので、ご注意ください。

投稿2021/01/18 10:12

dodox86

総合スコア9256

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

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

Yoshitsugu12

2021/01/19 02:44

なるほど、、! 思いつかなかったです。 非常に勉強になります。 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問